net: disallow drivers with buggy VLAN accel to register_netdevice()
Instead of jumping aroung bugs that are easily fixed just don't let them in: affected drivers should be either fixed or have NETIF_F_HW_VLAN_FILTER removed from advertised features. Quick grep in drivers/net shows two drivers that have NETIF_F_HW_VLAN_FILTER but not ndo_vlan_rx_add/kill_vid(), but those are false-positives (features are commented out). OTOH two drivers have ndo_vlan_rx_add/kill_vid() implemented but don't advertise NETIF_F_HW_VLAN_FILTER. Those are: +ethernet/cisco/enic/enic_main.c +ethernet/qlogic/qlcnic/qlcnic_main.c Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
29e3b1608c
commit
d2ed273d30
@@ -6054,6 +6054,14 @@ int register_netdevice(struct net_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
if (((dev->hw_features | dev->features) & NETIF_F_HW_VLAN_FILTER) &&
|
||||
(!dev->netdev_ops->ndo_vlan_rx_add_vid ||
|
||||
!dev->netdev_ops->ndo_vlan_rx_kill_vid)) {
|
||||
netdev_WARN(dev, "Buggy VLAN acceleration in driver!\n");
|
||||
ret = -EINVAL;
|
||||
goto err_uninit;
|
||||
}
|
||||
|
||||
ret = -EBUSY;
|
||||
if (!dev->ifindex)
|
||||
dev->ifindex = dev_new_index(net);
|
||||
|
Reference in New Issue
Block a user