diff options
author | Li RongQing <lirongqing@baidu.com> | 2018-10-15 19:00:31 +0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-10-15 22:53:52 -0700 |
commit | 1a3aea2534f4f3083f29b2b047aa83a9d6c777a4 (patch) | |
tree | a4a0f43e10e005cb9befae798f8f61da77c70108 /net | |
parent | bc0e7cf43370a8e229224623f516c9b0396e08b9 (diff) |
net: bridge: fix a possible memory leak in __vlan_add
After per-port vlan stats, vlan stats should be released
when fail to add vlan
Fixes: 9163a0fc1f0c0 ("net: bridge: add support for per-port vlan stats")
CC: bridge@lists.linux-foundation.org
cc: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
CC: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Zhang Yu <zhangyu31@baidu.com>
Signed-off-by: Li RongQing <lirongqing@baidu.com>
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/bridge/br_vlan.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c index 9b707234e4ae..8c9297a01947 100644 --- a/net/bridge/br_vlan.c +++ b/net/bridge/br_vlan.c @@ -303,6 +303,10 @@ out_filt: if (p) { __vlan_vid_del(dev, br, v->vid); if (masterv) { + if (v->stats && masterv->stats != v->stats) + free_percpu(v->stats); + v->stats = NULL; + br_vlan_put_master(masterv); v->brvlan = NULL; } |