Merge pull request #624 from ecsv/batadv-for-18.06
[feed/routing.git] / batman-adv / patches / 0043-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch
1 From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
2 Date: Wed, 15 Apr 2020 16:31:50 +0800
3 Subject: batman-adv: Fix refcnt leak in batadv_show_throughput_override
4
5 batadv_show_throughput_override() invokes batadv_hardif_get_by_netdev(),
6 which gets a batadv_hard_iface object from net_dev with increased refcnt
7 and its reference is assigned to a local pointer 'hard_iface'.
8
9 When batadv_show_throughput_override() returns, "hard_iface" becomes
10 invalid, so the refcount should be decreased to keep refcount balanced.
11
12 The issue happens in the normal path of
13 batadv_show_throughput_override(), which forgets to decrease the refcnt
14 increased by batadv_hardif_get_by_netdev() before the function returns,
15 causing a refcnt leak.
16
17 Fix this issue by calling batadv_hardif_put() before the
18 batadv_show_throughput_override() returns in the normal path.
19
20 Fixes: c513176e4b7a ("batman-adv: add throughput override attribute to hard_ifaces")
21 Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
22 Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
23 Signed-off-by: Sven Eckelmann <sven@narfation.org>
24
25 Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/f301bfed59b146a63471d0f147b767d7cafede6f
26
27 diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c
28 index 09427fc6494a157554d8b19f3481a878a9f97bba..7f7de0b16aa7ab70986735fbd9b42fd02de8a924 100644
29 --- a/net/batman-adv/sysfs.c
30 +++ b/net/batman-adv/sysfs.c
31 @@ -1126,6 +1126,7 @@ static ssize_t batadv_show_throughput_override(struct kobject *kobj,
32
33 tp_override = atomic_read(&hard_iface->bat_v.throughput_override);
34
35 + batadv_hardif_put(hard_iface);
36 return sprintf(buff, "%u.%u MBit\n", tp_override / 10,
37 tp_override % 10);
38 }