[linux-next] LinuxNextTracking branch, master, updated. next-20130513

batman at open-mesh.org batman at open-mesh.org
Tue May 14 00:17:17 CEST 2013


The following commit has been merged in the master branch:
commit a4361860351e87876aebd9595906d928ce8572c6
Author: Antonio Quartulli <ordex at autistici.org>
Date:   Tue May 7 01:06:18 2013 +0200

    batman-adv: reorder clean up routine in order to avoid race conditions
    
    nc_worker accesses the originator table during its periodic
    work, but since the originator table is freed before
    stopping the worker this leads to a global protection fault.
    
    Fix this by killing the worker (in nc_free) before freeing
    the originator table.
    
    Moreover tidy up the entire clean up routine by running all
    the subcomponents freeing procedures first and then killing
    the TT and the originator tables at the end.
    
    Signed-off-by: Antonio Quartulli <ordex at autistici.org>
    Signed-off-by: Marek Lindner <lindner_marek at yahoo.de>

diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index 9c620cd..1240f07 100644
--- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -163,14 +163,22 @@ void batadv_mesh_free(struct net_device *soft_iface)
 	batadv_vis_quit(bat_priv);
 
 	batadv_gw_node_purge(bat_priv);
-	batadv_originator_free(bat_priv);
 	batadv_nc_free(bat_priv);
+	batadv_dat_free(bat_priv);
+	batadv_bla_free(bat_priv);
 
+	/* Free the TT and the originator tables only after having terminated
+	 * all the other depending components which may use these structures for
+	 * their purposes.
+	 */
 	batadv_tt_free(bat_priv);
 
-	batadv_bla_free(bat_priv);
-
-	batadv_dat_free(bat_priv);
+	/* Since the originator table clean up routine is accessing the TT
+	 * tables as well, it has to be invoked after the TT tables have been
+	 * freed and marked as empty. This ensures that no cleanup RCU callbacks
+	 * accessing the TT data are scheduled for later execution.
+	 */
+	batadv_originator_free(bat_priv);
 
 	free_percpu(bat_priv->bat_counters);
 

-- 
LinuxNextTracking


More information about the linux-merge mailing list