diff options
author | Martin Hundebøll <martin@hundeboll.net> | 2013-04-17 15:13:16 -0400 |
---|---|---|
committer | Antonio Quartulli <ordex@autistici.org> | 2013-05-21 15:34:36 -0400 |
commit | f69ae770e74df420fbcf93aae81b30a5dcc73b7d (patch) | |
tree | 366080c1947e6650815e56c45f6ba53fe12a1cad /net/batman-adv | |
parent | 3ccfc1b1d2fa78f8ece83646027982916fcc794b (diff) |
batman-adv: Avoid double freeing of bat_counters
On errors in batadv_mesh_init(), bat_counters will be freed in both
batadv_mesh_free() and batadv_softif_init_late(). This patch fixes this
by returning earlier from batadv_softif_init_late() in case of errors in
batadv_mesh_init() and by setting bat_counters to NULL after freeing.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Diffstat (limited to 'net/batman-adv')
-rw-r--r-- | net/batman-adv/main.c | 1 | ||||
-rw-r--r-- | net/batman-adv/soft-interface.c | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c index 1240f07ad31d..51aafd669cbb 100644 --- a/net/batman-adv/main.c +++ b/net/batman-adv/main.c | |||
@@ -181,6 +181,7 @@ void batadv_mesh_free(struct net_device *soft_iface) | |||
181 | batadv_originator_free(bat_priv); | 181 | batadv_originator_free(bat_priv); |
182 | 182 | ||
183 | free_percpu(bat_priv->bat_counters); | 183 | free_percpu(bat_priv->bat_counters); |
184 | bat_priv->bat_counters = NULL; | ||
184 | 185 | ||
185 | atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE); | 186 | atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE); |
186 | } | 187 | } |
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c index 6f20d339e33a..819dfb006cdf 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c | |||
@@ -505,6 +505,7 @@ unreg_debugfs: | |||
505 | batadv_debugfs_del_meshif(dev); | 505 | batadv_debugfs_del_meshif(dev); |
506 | free_bat_counters: | 506 | free_bat_counters: |
507 | free_percpu(bat_priv->bat_counters); | 507 | free_percpu(bat_priv->bat_counters); |
508 | bat_priv->bat_counters = NULL; | ||
508 | 509 | ||
509 | return ret; | 510 | return ret; |
510 | } | 511 | } |