Merge pull request #624 from ecsv/batadv-for-18.06
[feed/routing.git] / batman-adv / patches / 0044-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch
1 From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
2 Date: Wed, 15 Apr 2020 16:35:21 +0800
3 Subject: batman-adv: Fix refcnt leak in batadv_store_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_store_throughput_override() returns, "hard_iface" becomes
10 invalid, so the refcount should be decreased to keep refcount balanced.
11
12 The issue happens in one error path of
13 batadv_store_throughput_override(). When batadv_parse_throughput()
14 returns NULL, the refcnt increased by batadv_hardif_get_by_netdev() is
15 not decreased, causing a refcnt leak.
16
17 Fix this issue by jumping to "out" label when batadv_parse_throughput()
18 returns NULL.
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/b69cd8bdbfd6fa7e61878c2fa9e6637406f40dd9
26
27 diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c
28 index 7f7de0b16aa7ab70986735fbd9b42fd02de8a924..976b038e53bf934332a39bad8a5509ca1aac0add 100644
29 --- a/net/batman-adv/sysfs.c
30 +++ b/net/batman-adv/sysfs.c
31 @@ -1093,7 +1093,7 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj,
32 ret = batadv_parse_throughput(net_dev, buff, "throughput_override",
33 &tp_override);
34 if (!ret)
35 - return count;
36 + goto out;
37
38 old_tp_override = atomic_read(&hard_iface->bat_v.throughput_override);
39 if (old_tp_override == tp_override)