On 09/01/18 23:40, Cong Wang wrote: > 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 <dvyu...@google.com> > Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" > (802.1p packet)") > Cc: Vlad Yasevich <vyasev...@gmail.com> > Cc: Ben Hutchings <ben.hutchi...@codethink.co.uk> > Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> > --- > net/8021q/vlan.c | 7 +------ > 1 file changed, 1 insertion(+), 6 deletions(-) > > diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c > index 8dfdd94e430f..bad01b14a4ad 100644 > --- a/net/8021q/vlan.c > +++ b/net/8021q/vlan.c > @@ -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 > - * HW accelerating devices or SW vlan input packet processing if > - * VLAN is not 0 (leave it there for 802.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); >
Just for reference - this is identical to the first part of: https://patchwork.ozlabs.org/patch/252891/ I knew this looked familiar. :-)