[linux-next] LinuxNextTracking branch, master, updated. next-20160512

batman at open-mesh.org batman at open-mesh.org
Fri May 13 00:15:42 CEST 2016


The following commit has been merged in the master branch:
commit a08d497d6718d579e496a801115aecc1c4fbb770
Author: Sven Eckelmann <sven at narfation.org>
Date:   Sat Mar 5 16:09:22 2016 +0100

    batman-adv: Use kref_get for batadv_gw_select
    
    batadv_gw_select requires that the caller already has a valid reference for
    new_gw_node. It is therefore not possible that it has an reference counter
    of 0 and was still given to this function
    
    The kref_get function instead WARNs (with debug information) when the
    reference counter would still be 0. This makes a bug in batman-adv better
    visible because kref_get_unless_zero would have ignored this problem.
    
    Signed-off-by: Sven Eckelmann <sven at narfation.org>
    Signed-off-by: Marek Lindner <mareklindner at neomailbox.ch>
    Signed-off-by: Antonio Quartulli <a at unstable.cc>

diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index c59aff5..bb1c4f3 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -135,8 +135,8 @@ static void batadv_gw_select(struct batadv_priv *bat_priv,
 
 	spin_lock_bh(&bat_priv->gw.list_lock);
 
-	if (new_gw_node && !kref_get_unless_zero(&new_gw_node->refcount))
-		new_gw_node = NULL;
+	if (new_gw_node)
+		kref_get(&new_gw_node->refcount);
 
 	curr_gw_node = rcu_dereference_protected(bat_priv->gw.curr_gw, 1);
 	rcu_assign_pointer(bat_priv->gw.curr_gw, new_gw_node);

-- 
LinuxNextTracking


More information about the linux-merge mailing list