From: Cong Wang <hidden> Date: 2018-01-09 21:40:52
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 <dvyukov@google.com>
Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)")
Cc: Vlad Yasevich <redacted>
Cc: Ben Hutchings <redacted>
Signed-off-by: Cong Wang <redacted>
---
net/8021q/vlan.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
@@ -111,12 +111,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)vlan_gvrp_uninit_applicant(real_dev);}-/* Take it out of our own structures, but be sure to interlock with-*HWacceleratingdevicesorSWvlaninputpacketprocessingif-*VLANisnot0(leaveittherefor802.1p).-*/-if(vlan_id)-vlan_vid_del(real_dev,vlan->vlan_proto,vlan_id);+vlan_vid_del(real_dev,vlan->vlan_proto,vlan_id);/* Get rid of the vlan's reference to real_dev */dev_put(real_dev);
From: Nikolay Aleksandrov <hidden> Date: 2018-01-09 22:30:46
On 09/01/18 23:40, Cong Wang wrote:
quoted hunk
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 <dvyukov@google.com>
Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)")
Cc: Vlad Yasevich <redacted>
Cc: Ben Hutchings <redacted>
Signed-off-by: Cong Wang <redacted>
---
net/8021q/vlan.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
@@ -111,12 +111,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)vlan_gvrp_uninit_applicant(real_dev);}-/* Take it out of our own structures, but be sure to interlock with-*HWacceleratingdevicesorSWvlaninputpacketprocessingif-*VLANisnot0(leaveittherefor802.1p).-*/-if(vlan_id)-vlan_vid_del(real_dev,vlan->vlan_proto,vlan_id);+vlan_vid_del(real_dev,vlan->vlan_proto,vlan_id);/* Get rid of the vlan's reference to real_dev */dev_put(real_dev);
Yeah, except bonding is not even involved. Unless I misread,
DaveM rejected it because of bond, which I never touch here.
The refcnt is paired in vlan_vid_{add,del}, and the calls are
paired in register/unreigster and NETDEV_UP/NETDEV_DOWN
after this patch.
Yeah, except bonding is not even involved. Unless I misread,
DaveM rejected it because of bond, which I never touch here.
The refcnt is paired in vlan_vid_{add,del}, and the calls are
paired in register/unreigster and NETDEV_UP/NETDEV_DOWN
after this patch.
You should read all of my replies to Dave, specifically the last one where I
describe exactly a memory leak, and IIRC the rejection was not because of the
bonding part but exactly because of this change - the removal of the vlan_id
conditional.
I'm not arguing about this patch now, I've said what I had to say back then,
I just gave it as a reference in case there's still relevant information in
there.
Thanks,
Nik
Yeah, except bonding is not even involved. Unless I misread,
DaveM rejected it because of bond, which I never touch here.
The refcnt is paired in vlan_vid_{add,del}, and the calls are
paired in register/unreigster and NETDEV_UP/NETDEV_DOWN
after this patch.
You should read all of my replies to Dave, specifically the last one where I
describe exactly a memory leak, and IIRC the rejection was not because of the
bonding part but exactly because of this change - the removal of the vlan_id
conditional.
Quote:
"If you have the 8021q module available, and you bring a device up, it gets
VLAN 0 by default, and if necessary programmed into the HW filters of the
device."
This is exactly a complain about your bonding check added for NETDEVUP,
which is clearly not here.
I'm not arguing about this patch now, I've said what I had to say back then,
I just gave it as a reference in case there's still relevant information in
there.
Me neither, I just want to point it out memory leak is real
and not even related to bond.
From: David Miller <davem@davemloft.net> Date: 2018-01-10 20:31:29
From: Cong Wang <redacted>
Date: Tue, 9 Jan 2018 13:40:41 -0800
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 <dvyukov@google.com>
Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)")
Cc: Vlad Yasevich <redacted>
Cc: Ben Hutchings <redacted>
Signed-off-by: Cong Wang <redacted>