On Wednesday 24 June 2015 19:00:18 Antonio Quartulli wrote:
On 24/06/15 14:50, Simon Wunderlich wrote:
@@ -537,9 +529,15 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,> /* Note: We don't need a NULL check here, since curr_gw never * gets dereferenced. */
spin_lock_bh(&bat_priv->gw.list_lock);
hlist_del_rcu(&gw_node->list);
spin_unlock_bh(&bat_priv->gw.list_lock);
have you verified that we can't get to this point through two threads and enter the same problem that Sven and Marek have been discussing and fixing in these days: removing an element from a list twice
If this is possible, you should check that this element is in the list before deleting it.
That's an excellent point, I didn't check that. It also appears a little complicated, so I'll add some more protection at this point and resend v2.
Thank you! Simon