Jiri Slaby 77d625
From: Cong Wang <xiyou.wangcong@gmail.com>
Jiri Slaby 77d625
Date: Tue, 9 Jan 2018 13:40:41 -0800
Jiri Slaby 77d625
Subject: 8021q: fix a memory leak for VLAN 0 device
Jiri Slaby 77d625
Git-commit: 78bbb15f2239bc8e663aa20bbe1987c91a0b75f6
Jiri Slaby 77d625
Patch-mainline: v4.15-rc8
Jiri Slaby 77d625
References: networking-stable-18_01_12
Jiri Slaby 77d625
Jiri Slaby 77d625
A vlan device with vid 0 is allow to creat by not able to be fully
Jiri Slaby 77d625
cleaned up by unregister_vlan_dev() which checks for vlan_id!=0.
Jiri Slaby 77d625
Jiri Slaby 77d625
Also, VLAN 0 is probably not a valid number and it is kinda
Jiri Slaby 77d625
"reserved" for HW accelerating devices, but it is probably too
Jiri Slaby 77d625
late to reject it from creation even if makes sense. Instead,
Jiri Slaby 77d625
just remove the check in unregister_vlan_dev().
Jiri Slaby 77d625
Jiri Slaby 77d625
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Jiri Slaby 77d625
Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)")
Jiri Slaby 77d625
Cc: Vlad Yasevich <vyasevich@gmail.com>
Jiri Slaby 77d625
Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
Jiri Slaby 77d625
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Jiri Slaby 77d625
Signed-off-by: David S. Miller <davem@davemloft.net>
Jiri Slaby 77d625
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby 77d625
---
Jiri Slaby 77d625
 net/8021q/vlan.c |    7 +------
Jiri Slaby 77d625
 1 file changed, 1 insertion(+), 6 deletions(-)
Jiri Slaby 77d625
Jiri Slaby 77d625
--- a/net/8021q/vlan.c
Jiri Slaby 77d625
+++ b/net/8021q/vlan.c
Jiri Slaby 77d625
@@ -111,12 +111,7 @@ void unregister_vlan_dev(struct net_devi
Jiri Slaby 77d625
 		vlan_gvrp_uninit_applicant(real_dev);
Jiri Slaby 77d625
 	}
Jiri Slaby 77d625
 
Jiri Slaby 77d625
-	/* Take it out of our own structures, but be sure to interlock with
Jiri Slaby 77d625
-	 * HW accelerating devices or SW vlan input packet processing if
Jiri Slaby 77d625
-	 * VLAN is not 0 (leave it there for 802.1p).
Jiri Slaby 77d625
-	 */
Jiri Slaby 77d625
-	if (vlan_id)
Jiri Slaby 77d625
-		vlan_vid_del(real_dev, vlan->vlan_proto, vlan_id);
Jiri Slaby 77d625
+	vlan_vid_del(real_dev, vlan->vlan_proto, vlan_id);
Jiri Slaby 77d625
 
Jiri Slaby 77d625
 	/* Get rid of the vlan's reference to real_dev */
Jiri Slaby 77d625
 	dev_put(real_dev);