batman-adv: set TT_CLIENT_NEW flag before invoking hash_add()
authorAntonio Quartulli <ordex@autistici.org>
Fri, 6 Jan 2012 20:31:33 +0000 (21:31 +0100)
committerMarek Lindner <lindner_marek@yahoo.de>
Thu, 16 Feb 2012 18:50:21 +0000 (02:50 +0800)
In case of a new tt_local_entry, the TT_CLIENT_NEW flag has to be set before
adding such entry to the hash table. Otherwise, it opens a race condition
in which the entry can be found but the flag has not been set.

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
net/batman-adv/translation-table.c

index 4dc5af334f6b7f03cdda615a165ced673865f05b..9be9c41c529b0c14a95473a01f1faf66577705d7 100644 (file)
@@ -210,6 +210,11 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
        if (compare_eth(addr, soft_iface->dev_addr))
                tt_local_entry->common.flags |= TT_CLIENT_NOPURGE;
 
+       /* The local entry has to be marked as NEW to avoid to send it in
+        * a full table response going out before the next ttvn increment
+        * (consistency check) */
+       tt_local_entry->common.flags |= TT_CLIENT_NEW;
+
        hash_added = hash_add(bat_priv->tt_local_hash, compare_tt, choose_orig,
                         &tt_local_entry->common,
                         &tt_local_entry->common.hash_entry);
@@ -222,11 +227,6 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
 
        tt_local_event(bat_priv, addr, tt_local_entry->common.flags);
 
-       /* The local entry has to be marked as NEW to avoid to send it in
-        * a full table response going out before the next ttvn increment
-        * (consistency check) */
-       tt_local_entry->common.flags |= TT_CLIENT_NEW;
-
        /* remove address from global hash if present */
        tt_global_entry = tt_global_hash_find(bat_priv, addr);