9e548da332cdb7a890bbac919ae9158fe776e714
[feed/routing.git] / batman-adv / patches / 0007-batman-adv-Free-last_bonding_candidate-on-release-of.patch
1 From: Sven Eckelmann <sven@narfation.org>
2 Date: Thu, 30 Jun 2016 21:41:13 +0200
3 Subject: [PATCH] batman-adv: Free last_bonding_candidate on release of orig_node
4
5 The orig_ifinfo reference counter for last_bonding_candidate in
6 batadv_orig_node has to be reduced when an originator node is released.
7 Otherwise the orig_ifinfo is leaked and the reference counter the netdevice
8 is not reduced correctly.
9
10 Fixes: 797edd9e87ac ("batman-adv: add bonding again")
11 Signed-off-by: Sven Eckelmann <sven@narfation.org>
12 Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
13
14 Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/20df5c53865a90095099f0af80536b8abfea303b
15 ---
16 net/batman-adv/originator.c | 7 +++++++
17 1 file changed, 7 insertions(+)
18
19 diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
20 index fe2fcda..ab8c4f9 100644
21 --- a/net/batman-adv/originator.c
22 +++ b/net/batman-adv/originator.c
23 @@ -766,6 +766,7 @@ static void batadv_orig_node_release(struct kref *ref)
24 struct batadv_orig_node *orig_node;
25 struct batadv_orig_ifinfo *orig_ifinfo;
26 struct batadv_orig_node_vlan *vlan;
27 + struct batadv_orig_ifinfo *last_candidate;
28
29 orig_node = container_of(ref, struct batadv_orig_node, refcount);
30
31 @@ -783,8 +784,14 @@ static void batadv_orig_node_release(struct kref *ref)
32 hlist_del_rcu(&orig_ifinfo->list);
33 batadv_orig_ifinfo_put(orig_ifinfo);
34 }
35 +
36 + last_candidate = orig_node->last_bonding_candidate;
37 + orig_node->last_bonding_candidate = NULL;
38 spin_unlock_bh(&orig_node->neigh_list_lock);
39
40 + if (last_candidate)
41 + batadv_orig_ifinfo_put(last_candidate);
42 +
43 spin_lock_bh(&orig_node->vlan_list_lock);
44 hlist_for_each_entry_safe(vlan, node_tmp, &orig_node->vlan_list, list) {
45 hlist_del_rcu(&vlan->list);