summaryrefslogtreecommitdiff
path: root/net/batman-adv
diff options
context:
space:
mode:
authorSven Eckelmann <sven@narfation.org>2016-03-05 16:09:21 +0100
committerBen Hutchings <ben@decadent.org.uk>2018-12-16 22:09:10 +0000
commit69165193ace2823e9bdca9b544e5fb8dbab27209 (patch)
tree00e78f66075767e0c2765cda05fd6be03acda8f3 /net/batman-adv
parentd7514471eb4747ff411c9feca092f2fea119662c (diff)
batman-adv: Use kref_get for batadv_nc_get_nc_node
commit 0de32ceee156787429035c974316f4e5098cf722 upstream. batadv_nc_get_nc_node requires that the caller already has a valid reference for orig_neigh_node. It is therefore not possible that it has an reference counter of 0 and was still given to this function The kref_get function instead WARNs (with debug information) when the reference counter would still be 0. This makes a bug in batman-adv better visible because kref_get_unless_zero would have ignored this problem. Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Antonio Quartulli <a@unstable.cc> [bwh: Backported to 3.16: Reference counts are not krefs here, so open- code the equivalent of kref_get()] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'net/batman-adv')
-rw-r--r--net/batman-adv/network-coding.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c
index 4e718162a26b..33ce5723a1a4 100644
--- a/net/batman-adv/network-coding.c
+++ b/net/batman-adv/network-coding.c
@@ -813,8 +813,7 @@ static struct batadv_nc_node
if (!nc_node)
return NULL;
- if (!atomic_inc_not_zero(&orig_neigh_node->refcount))
- goto free;
+ WARN_ON_ONCE(atomic_inc_return(&orig_neigh_node->refcount) < 2);
/* Initialize nc_node */
INIT_LIST_HEAD(&nc_node->list);
@@ -840,10 +839,6 @@ static struct batadv_nc_node
spin_unlock_bh(lock);
return nc_node;
-
-free:
- kfree(nc_node);
- return NULL;
}
/**