From: Cong Wang Date: Tue, 9 Jan 2018 21:40:41 +0000 (-0800) Subject: 8021q: fix a memory leak for VLAN 0 device X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=commitdiff_plain;h=be1b829c0d3d1be6692194d1b6bb91d544266ce5 8021q: fix a memory leak for VLAN 0 device commit 78bbb15f2239bc8e663aa20bbe1987c91a0b75f6 upstream. A vlan device with vid 0 is allow to creat by not able to be fully cleaned up by unregister_vlan_dev() which checks for vlan_id!=0. Also, VLAN 0 is probably not a valid number and it is kinda "reserved" for HW accelerating devices, but it is probably too late to reject it from creation even if makes sense. Instead, just remove the check in unregister_vlan_dev(). Reported-by: Dmitry Vyukov Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)") Cc: Vlad Yasevich Cc: Ben Hutchings Signed-off-by: Cong Wang Signed-off-by: David S. Miller [bwh: Backported to 3.2: The vlan driver didn't leak memory itself, but might cause underlying drivers to leak resources for VID 0. Keep the check for hardware acceleration.] Signed-off-by: Ben Hutchings --- diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 963f285e69ca..ff240391b484 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -132,11 +132,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head) call_rcu(&grp->rcu, vlan_rcu_free); } - /* Take it out of our own structures, but be sure to interlock with - * HW accelerating devices or SW vlan input packet processing if - * VLAN is not 0 (leave it there for 802.1p). - */ - if (vlan_id && (real_dev->features & NETIF_F_HW_VLAN_FILTER)) + if (real_dev->features & NETIF_F_HW_VLAN_FILTER) ops->ndo_vlan_rx_kill_vid(real_dev, vlan_id); /* Get rid of the vlan's reference to real_dev */