• Sven Eckelmann's avatar
    batman-adv: Only put gw_node list reference when removed · c18bdd01
    Sven Eckelmann authored
    The batadv_gw_node reference counter in batadv_gw_node_update can only be
    reduced when the list entry was actually removed. Otherwise the reference
    counter may reach zero when batadv_gw_node_update is called from two
    different contexts for the same gw_node but only one context is actually
    removing the entry from the list.
    
    The release function for this gw_node is not called inside the list_lock
    spinlock protected region because the function batadv_gw_node_update still
    holds a gw_node reference for the object pointer on the stack. Thus the
    actual release function (when required) will be called only at the end of
    the function.
    
    Fixes: bd3524c1 ("batman-adv: remove obsolete deleted attribute for gateway node")
    Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
    Signed-off-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
    Signed-off-by: default avatarAntonio Quartulli <a@unstable.cc>
    c18bdd01
gateway_client.c 23.8 KB