mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
batman-adv: fix gw_node_update() and gw_election()
This is a regression from c4aac1ab9b973798163b34939b522f01e4d28ac9 - 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>
This commit is contained in:
parent
5f657ec0d2
commit
71e4aa9c46
@ -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();
|
||||
@ -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) {
|
||||
@ -350,7 +354,7 @@ deselect:
|
||||
gw_deselect(bat_priv);
|
||||
unlock:
|
||||
rcu_read_unlock();
|
||||
out:
|
||||
|
||||
if (curr_gw)
|
||||
gw_node_free_ref(curr_gw);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user