Staging: batman-adv: Always protect list_for_each_entry_rcu with RCU
authorSven Eckelmann <sven.eckelmann@gmx.de>
Sat, 18 Sep 2010 19:01:16 +0000 (21:01 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 20 Sep 2010 23:29:49 +0000 (16:29 -0700)
receive_bat_packet is not called with rcu_read_lock so we must ensure by
ourself that we protect list_for_each_entry_rcu using the correct RCU
locks.

Signed-off-by: Sven Eckelmann <sven.eckelmann@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/batman-adv/routing.c

index 2cf8cf98a299f76ec91ae8657d86bf15b366ded6..58aa99ed5748ce8c7e9e20645667a83be58391ba 100644 (file)
@@ -563,6 +563,7 @@ void receive_bat_packet(struct ethhdr *ethhdr,
                batman_packet->tq, batman_packet->ttl, batman_packet->version,
                has_directlink_flag);
 
+       rcu_read_lock();
        list_for_each_entry_rcu(batman_if, &if_list, list) {
                if (batman_if->if_status != IF_ACTIVE)
                        continue;
@@ -585,6 +586,7 @@ void receive_bat_packet(struct ethhdr *ethhdr,
                if (compare_orig(ethhdr->h_source, broadcast_addr))
                        is_broadcast = 1;
        }
+       rcu_read_unlock();
 
        if (batman_packet->version != COMPAT_VERSION) {
                bat_dbg(DBG_BATMAN, bat_priv,