diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2010-08-02 10:59:04 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-03 00:20:21 -0400 |
commit | 3bfacf96abc747e3a4bafa7550deb0372d7d0e20 (patch) | |
tree | 741574786070528b078faecca6934e07150dd0b1 /drivers | |
parent | 8e86acd7d5968e08b3e1604e685a8c45f6fd7f40 (diff) |
ixgbevf: fix null pointer dereference due to filter being set for VLAN 0
This change corrects an issue that resulted in a null pointer dereference
for the addition of VLAN 0 without any VLANs being registered. Also this
code removes some unnecessary checks for defines and the unnecessary setting
of VLAN flags since that is now handled within the kernel via the
vlan_features.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ixgbevf/ixgbevf_main.c | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/drivers/net/ixgbevf/ixgbevf_main.c b/drivers/net/ixgbevf/ixgbevf_main.c index 4867440ecfa8..3e291ccc629d 100644 --- a/drivers/net/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ixgbevf/ixgbevf_main.c | |||
@@ -1463,18 +1463,10 @@ static void ixgbevf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
1463 | { | 1463 | { |
1464 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); | 1464 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); |
1465 | struct ixgbe_hw *hw = &adapter->hw; | 1465 | struct ixgbe_hw *hw = &adapter->hw; |
1466 | struct net_device *v_netdev; | ||
1467 | 1466 | ||
1468 | /* add VID to filter table */ | 1467 | /* add VID to filter table */ |
1469 | if (hw->mac.ops.set_vfta) | 1468 | if (hw->mac.ops.set_vfta) |
1470 | hw->mac.ops.set_vfta(hw, vid, 0, true); | 1469 | hw->mac.ops.set_vfta(hw, vid, 0, true); |
1471 | /* | ||
1472 | * Copy feature flags from netdev to the vlan netdev for this vid. | ||
1473 | * This allows things like TSO to bubble down to our vlan device. | ||
1474 | */ | ||
1475 | v_netdev = vlan_group_get_device(adapter->vlgrp, vid); | ||
1476 | v_netdev->features |= adapter->netdev->features; | ||
1477 | vlan_group_set_device(adapter->vlgrp, vid, v_netdev); | ||
1478 | } | 1470 | } |
1479 | 1471 | ||
1480 | static void ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 1472 | static void ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) |
@@ -3402,7 +3394,6 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev, | |||
3402 | /* setup the private structure */ | 3394 | /* setup the private structure */ |
3403 | err = ixgbevf_sw_init(adapter); | 3395 | err = ixgbevf_sw_init(adapter); |
3404 | 3396 | ||
3405 | #ifdef MAX_SKB_FRAGS | ||
3406 | netdev->features = NETIF_F_SG | | 3397 | netdev->features = NETIF_F_SG | |
3407 | NETIF_F_IP_CSUM | | 3398 | NETIF_F_IP_CSUM | |
3408 | NETIF_F_HW_VLAN_TX | | 3399 | NETIF_F_HW_VLAN_TX | |
@@ -3416,13 +3407,12 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev, | |||
3416 | netdev->vlan_features |= NETIF_F_TSO; | 3407 | netdev->vlan_features |= NETIF_F_TSO; |
3417 | netdev->vlan_features |= NETIF_F_TSO6; | 3408 | netdev->vlan_features |= NETIF_F_TSO6; |
3418 | netdev->vlan_features |= NETIF_F_IP_CSUM; | 3409 | netdev->vlan_features |= NETIF_F_IP_CSUM; |
3410 | netdev->vlan_features |= NETIF_F_IPV6_CSUM; | ||
3419 | netdev->vlan_features |= NETIF_F_SG; | 3411 | netdev->vlan_features |= NETIF_F_SG; |
3420 | 3412 | ||
3421 | if (pci_using_dac) | 3413 | if (pci_using_dac) |
3422 | netdev->features |= NETIF_F_HIGHDMA; | 3414 | netdev->features |= NETIF_F_HIGHDMA; |
3423 | 3415 | ||
3424 | #endif /* MAX_SKB_FRAGS */ | ||
3425 | |||
3426 | /* The HW MAC address was set and/or determined in sw_init */ | 3416 | /* The HW MAC address was set and/or determined in sw_init */ |
3427 | memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len); | 3417 | memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len); |
3428 | memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len); | 3418 | memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len); |