From: Johannes Berg <johannes@sipsolutions.net>
To: Bob Copeland <me@bobcopeland.com>
Cc: linux-wireless@vger.kernel.org, fred.veldini@gmail.com,
nbd@nbd.name, stable@vger.kernel.org
Subject: Re: [PATCH v2] mac80211: mesh: flush mesh paths unconditionally
Date: Tue, 31 May 2016 12:13:36 +0200 [thread overview]
Message-ID: <1464689616.3076.10.camel@sipsolutions.net> (raw)
In-Reply-To: <1463332756-31423-1-git-send-email-me@bobcopeland.com> (sfid-20160515_191932_658002_65A3F8B9)
On Sun, 2016-05-15 at 13:19 -0400, Bob Copeland wrote:
> Currently, the mesh paths associated with a nexthop station are
> cleaned
> up in the following code path:
>
> __sta_info_destroy_part1
> synchronize_net()
> __sta_info_destroy_part2
> -> cleanup_single_sta
> -> mesh_sta_cleanup
> -> mesh_plink_deactivate
> -> mesh_path_flush_by_nexthop
>
> However, there are a couple of problems here:
>
> 1) the paths aren't flushed at all if the MPM is running in userspace
> (e.g. when using wpa_supplicant or authsae)
>
> 2) there is no synchronize_rcu between removing the path and readers
> accessing the nexthop, which means the following race is possible:
>
> CPU0 CPU1
> ~~~~ ~~~~
> sta_info_destroy_part1()
> synchronize_net()
> rcu_read_lock()
> mesh_nexthop_resolve()
> mpath = mesh_path_lookup()
> [...] -> mesh_path_flush_by_nexthop()
> sta = rcu_dereference(
> mpath->next_hop)
> kfree(sta)
> access sta <-- CRASH
>
> Fix both of these by unconditionally flushing paths before destroying
> the sta, and by adding a synchronize_net() after path flush to ensure
> no active readers can still dereference the sta.
>
[...]
Applied, thanks for the fix and the detailed description!
johannes
prev parent reply other threads:[~2016-05-31 10:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-15 17:19 [PATCH v2] mac80211: mesh: flush mesh paths unconditionally Bob Copeland
2016-05-31 10:13 ` Johannes Berg [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1464689616.3076.10.camel@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=fred.veldini@gmail.com \
--cc=linux-wireless@vger.kernel.org \
--cc=me@bobcopeland.com \
--cc=nbd@nbd.name \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).