[2/2] batman-adv: Fix imbalanced locking in gw_node_update
Commit Message
8ffdea813e32cee3c60be36fb9e6a5e077e51ea0 used rcu_read_unlock without
using rcu_read_lock when gw_get_selected_gw_node didn't return a valid
gw_node.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
gateway_client.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
Comments
On Friday 01 April 2011 08:49:19 Sven Eckelmann wrote:
> 8ffdea813e32cee3c60be36fb9e6a5e077e51ea0 used rcu_read_unlock without
> using rcu_read_lock when gw_get_selected_gw_node didn't return a valid
> gw_node.
Applied a slightly modified variant in revision g76eab02.
Thanks,
Marek
PS: I prefer the goto patch over the return statement. :-)
@@ -312,7 +312,7 @@ void gw_node_update(struct bat_priv *bat_priv,
curr_gw = gw_get_selected_gw_node(bat_priv);
if (!curr_gw)
- goto out;
+ goto freeref;
rcu_read_lock();
hlist_for_each_entry_rcu(gw_node, node, &bat_priv->gw_list, list) {
@@ -350,6 +350,7 @@ deselect:
gw_deselect(bat_priv);
out:
rcu_read_unlock();
+freeref:
if (curr_gw)
gw_node_free_ref(curr_gw);
}