Skip to content

Commit

Permalink
batman-adv: fix gw_node_update() and gw_election()
Browse files Browse the repository at this point in the history
This is a regression from c4aac1a

- gw_node_update() doesn't add a new gw_node in case of empty curr_gw.
This means that at the beginning no gw_node is added, leading to an
empty gateway list.

- gw_election() is terminating in case of curr_gw == NULL. It has to
terminate in case of curr_gw != NULL

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
  • Loading branch information
Antonio Quartulli authored and Sven Eckelmann committed May 1, 2011
1 parent 5f657ec commit 71e4aa9
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions net/batman-adv/gateway_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ void gw_election(struct bat_priv *bat_priv)
return;

curr_gw = gw_get_selected_gw_node(bat_priv);
if (!curr_gw)
if (curr_gw)
goto out;

rcu_read_lock();
Expand Down Expand Up @@ -310,9 +310,13 @@ void gw_node_update(struct bat_priv *bat_priv,
struct hlist_node *node;
struct gw_node *gw_node, *curr_gw;

/**
* Note: We don't need a NULL check here, since curr_gw never gets
* dereferenced. If curr_gw is NULL we also should not exit as we may
* have this gateway in our list (duplication check!) even though we
* have no currently selected gateway.
*/
curr_gw = gw_get_selected_gw_node(bat_priv);
if (!curr_gw)
goto out;

rcu_read_lock();
hlist_for_each_entry_rcu(gw_node, node, &bat_priv->gw_list, list) {
Expand Down Expand Up @@ -350,7 +354,7 @@ void gw_node_update(struct bat_priv *bat_priv,
gw_deselect(bat_priv);
unlock:
rcu_read_unlock();
out:

if (curr_gw)
gw_node_free_ref(curr_gw);
}
Expand Down

0 comments on commit 71e4aa9

Please sign in to comment.