Message ID | 1497596402-81457-1-git-send-email-gfree.wind@vip.163.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: gfree.wind@vip.163.com Date: Fri, 16 Jun 2017 15:00:02 +0800 > From: Gao Feng <gfree.wind@vip.163.com> > > The register_vlan_device would invoke free_netdev directly, when > register_vlan_dev failed. It would trigger the BUG_ON in free_netdev > if the dev was already registered. In this case, the netdev would be > freed in netdev_run_todo later. > > So add one condition check now. Only when dev is not registered, then > free it directly. > > The following is the part coredump when netdev_upper_dev_link failed > in register_vlan_dev. I removed the lines which are too long. ... > Signed-off-by: Gao Feng <gfree.wind@vip.163.com> Ok, I guess this is how we will have to fix this. Applied, thanks.
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 467069b..9649579 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -277,7 +277,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id) return 0; out_free_newdev: - free_netdev(new_dev); + if (new_dev->reg_state == NETREG_UNINITIALIZED) + free_netdev(new_dev); return err; }