Thread (31 messages) read the whole thread 31 messages, 3 authors, 2011-08-29

Re: [PATCH 1/9] mac80211: Fix RCU pointer dereference in mesh_path_discard_frame()

From: Johannes Berg <johannes@sipsolutions.net>
Date: 2011-08-25 18:21:59

On Thu, 25 Aug 2011 11:16:50 -0700, Javier Cardona wrote:
On Wed, Aug 24, 2011 at 7:08 PM, Johannes Berg
[off-list ref] wrote:
quoted
On Wed, 24 Aug 2011 18:40:44 -0700, Thomas Pedersen wrote:
quoted
               da = hdr->addr3;
               ra = hdr->addr1;
+               rcu_read_lock();
               mpath = mesh_path_lookup(da, sdata);
+               rcu_read_unlock();
               if (mpath)
                       sn = ++mpath->sn;
               mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl,
skb->data,
You've got to be kidding. Didn't I just explain RCU :)
The patch was prepared before your RCU session :(
Just to confirm I got it right before we resubmit: given that not 
only
the path table accessed inside mesh_path_lookup() but also the mpaths
themselves are RCU protected, the right fix should have been

               da = hdr->addr3;
               ra = hdr->addr1;
+             rcu_read_lock();
               mpath = mesh_path_lookup(da, sdata);
               if (mpath)
                       sn = ++mpath->sn;
+             rcu_read_unlock();
               mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl,
skb->data,

Correct?
Frankly, I'm not sure, since you modify the mpath->sn you probably need 
to hold a real lock, otherwise ++mpath->sn can race against itself in 
this very function.

johannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help