aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2010-08-02 10:59:04 -0400
committerDavid S. Miller <davem@davemloft.net>2010-08-03 00:20:21 -0400
commit3bfacf96abc747e3a4bafa7550deb0372d7d0e20 (patch)
tree741574786070528b078faecca6934e07150dd0b1 /drivers
parent8e86acd7d5968e08b3e1604e685a8c45f6fd7f40 (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.c12
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
1480static void ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) 1472static 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);