Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (30 commits)
xfrm: Restrict extended sequence numbers to esp
xfrm: Check for esn buffer len in xfrm_new_ae
xfrm: Assign esn pointers when cloning a state
xfrm: Move the test on replay window size into the replay check functions
netdev: bfin_mac: document TE setting in RMII modes
drivers net: Fix declaration ordering in inline functions.
cxgb3: Apply interrupt coalescing settings to all queues
net: Always allocate at least 16 skb frags regardless of page size
ipv4: Don't ip_rt_put() an error pointer in RAW sockets.
net: fix ethtool->set_flags not intended -EINVAL return value
mlx4_en: Fix loss of promiscuity
tg3: Fix inline keyword usage
tg3: use <linux/io.h> and <linux/uaccess.h> instead <asm/io.h> and <asm/uaccess.h>
net: use CHECKSUM_NONE instead of magic number
Net / jme: Do not use legacy PCI power management
myri10ge: small rx_done refactoring
bridge: notify applications if address of bridge device changes
ipv4: Fix IP timestamp option (IPOPT_TS_PRESPEC) handling in ip_options_echo()
can: c_can: Fix tx_bytes accounting
can: c_can_platform: fix irq check in probe
...

+326 -189
+11 -2
drivers/net/bfin_mac.c
··· 1237 1238 if (phydev->interface == PHY_INTERFACE_MODE_RMII) { 1239 opmode |= RMII; /* For Now only 100MBit are supported */ 1240 - #if (defined(CONFIG_BF537) || defined(CONFIG_BF536)) && CONFIG_BF_REV_0_2 1241 - opmode |= TE; 1242 #endif 1243 } 1244
··· 1237 1238 if (phydev->interface == PHY_INTERFACE_MODE_RMII) { 1239 opmode |= RMII; /* For Now only 100MBit are supported */ 1240 + #if defined(CONFIG_BF537) || defined(CONFIG_BF536) 1241 + if (__SILICON_REVISION__ < 3) { 1242 + /* 1243 + * This isn't publicly documented (fun times!), but in 1244 + * silicon <=0.2, the RX and TX pins are clocked together. 1245 + * So in order to recv, we must enable the transmit side 1246 + * as well. This will cause a spurious TX interrupt too, 1247 + * but we can easily consume that. 1248 + */ 1249 + opmode |= TE; 1250 + } 1251 #endif 1252 } 1253
+1 -1
drivers/net/bnx2.c
··· 8317 #endif 8318 }; 8319 8320 - static void inline vlan_features_add(struct net_device *dev, u32 flags) 8321 { 8322 dev->vlan_features |= flags; 8323 }
··· 8317 #endif 8318 }; 8319 8320 + static inline void vlan_features_add(struct net_device *dev, u32 flags) 8321 { 8322 dev->vlan_features |= flags; 8323 }
+5 -11
drivers/net/can/c_can/c_can.c
··· 588 { 589 struct c_can_priv *priv = netdev_priv(dev); 590 591 - if (priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT) 592 - /* disable automatic retransmission */ 593 - priv->write_reg(priv, &priv->regs->control, 594 - CONTROL_DISABLE_AR); 595 - else 596 - /* enable automatic retransmission */ 597 - priv->write_reg(priv, &priv->regs->control, 598 - CONTROL_ENABLE_AR); 599 600 if (priv->can.ctrlmode & (CAN_CTRLMODE_LISTENONLY & 601 CAN_CTRLMODE_LOOPBACK)) { ··· 699 700 for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) { 701 msg_obj_no = get_tx_echo_msg_obj(priv); 702 - c_can_inval_msg_object(dev, 0, msg_obj_no); 703 val = c_can_read_reg32(priv, &priv->regs->txrqst1); 704 if (!(val & (1 << msg_obj_no))) { 705 can_get_echo_skb(dev, ··· 707 &priv->regs->ifregs[0].msg_cntrl) 708 & IF_MCONT_DLC_MASK; 709 stats->tx_packets++; 710 } 711 } 712 ··· 1107 priv->can.bittiming_const = &c_can_bittiming_const; 1108 priv->can.do_set_mode = c_can_set_mode; 1109 priv->can.do_get_berr_counter = c_can_get_berr_counter; 1110 - priv->can.ctrlmode_supported = CAN_CTRLMODE_ONE_SHOT | 1111 - CAN_CTRLMODE_LOOPBACK | 1112 CAN_CTRLMODE_LISTENONLY | 1113 CAN_CTRLMODE_BERR_REPORTING; 1114
··· 588 { 589 struct c_can_priv *priv = netdev_priv(dev); 590 591 + /* enable automatic retransmission */ 592 + priv->write_reg(priv, &priv->regs->control, 593 + CONTROL_ENABLE_AR); 594 595 if (priv->can.ctrlmode & (CAN_CTRLMODE_LISTENONLY & 596 CAN_CTRLMODE_LOOPBACK)) { ··· 704 705 for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) { 706 msg_obj_no = get_tx_echo_msg_obj(priv); 707 val = c_can_read_reg32(priv, &priv->regs->txrqst1); 708 if (!(val & (1 << msg_obj_no))) { 709 can_get_echo_skb(dev, ··· 713 &priv->regs->ifregs[0].msg_cntrl) 714 & IF_MCONT_DLC_MASK; 715 stats->tx_packets++; 716 + c_can_inval_msg_object(dev, 0, msg_obj_no); 717 } 718 } 719 ··· 1112 priv->can.bittiming_const = &c_can_bittiming_const; 1113 priv->can.do_set_mode = c_can_set_mode; 1114 priv->can.do_get_berr_counter = c_can_get_berr_counter; 1115 + priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK | 1116 CAN_CTRLMODE_LISTENONLY | 1117 CAN_CTRLMODE_BERR_REPORTING; 1118
+5 -4
drivers/net/can/c_can/c_can_platform.c
··· 73 void __iomem *addr; 74 struct net_device *dev; 75 struct c_can_priv *priv; 76 - struct resource *mem, *irq; 77 #ifdef CONFIG_HAVE_CLK 78 struct clk *clk; 79 ··· 89 90 /* get the platform data */ 91 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 92 - irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 93 - if (!mem || (irq <= 0)) { 94 ret = -ENODEV; 95 goto exit_free_clk; 96 } ··· 118 119 priv = netdev_priv(dev); 120 121 - dev->irq = irq->start; 122 priv->regs = addr; 123 #ifdef CONFIG_HAVE_CLK 124 priv->can.clock.freq = clk_get_rate(clk);
··· 73 void __iomem *addr; 74 struct net_device *dev; 75 struct c_can_priv *priv; 76 + struct resource *mem; 77 + int irq; 78 #ifdef CONFIG_HAVE_CLK 79 struct clk *clk; 80 ··· 88 89 /* get the platform data */ 90 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 91 + irq = platform_get_irq(pdev, 0); 92 + if (!mem || irq <= 0) { 93 ret = -ENODEV; 94 goto exit_free_clk; 95 } ··· 117 118 priv = netdev_priv(dev); 119 120 + dev->irq = irq; 121 priv->regs = addr; 122 #ifdef CONFIG_HAVE_CLK 123 priv->can.clock.freq = clk_get_rate(clk);
+10 -4
drivers/net/cxgb3/cxgb3_main.c
··· 1983 { 1984 struct port_info *pi = netdev_priv(dev); 1985 struct adapter *adapter = pi->adapter; 1986 - struct qset_params *qsp = &adapter->params.sge.qset[0]; 1987 - struct sge_qset *qs = &adapter->sge.qs[0]; 1988 1989 if (c->rx_coalesce_usecs * 10 > M_NEWTIMER) 1990 return -EINVAL; 1991 1992 - qsp->coalesce_usecs = c->rx_coalesce_usecs; 1993 - t3_update_qset_coalesce(qs, qsp); 1994 return 0; 1995 } 1996
··· 1983 { 1984 struct port_info *pi = netdev_priv(dev); 1985 struct adapter *adapter = pi->adapter; 1986 + struct qset_params *qsp; 1987 + struct sge_qset *qs; 1988 + int i; 1989 1990 if (c->rx_coalesce_usecs * 10 > M_NEWTIMER) 1991 return -EINVAL; 1992 1993 + for (i = 0; i < pi->nqsets; i++) { 1994 + qsp = &adapter->params.sge.qset[i]; 1995 + qs = &adapter->sge.qs[i]; 1996 + qsp->coalesce_usecs = c->rx_coalesce_usecs; 1997 + t3_update_qset_coalesce(qs, qsp); 1998 + } 1999 + 2000 return 0; 2001 } 2002
+16 -14
drivers/net/jme.c
··· 273 { 274 jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs); 275 pci_set_power_state(jme->pdev, PCI_D0); 276 - pci_enable_wake(jme->pdev, PCI_D0, false); 277 } 278 279 static int ··· 2538 2539 jwrite32(jme, JME_PMCS, jme->reg_pmcs); 2540 2541 return 0; 2542 } 2543 ··· 3174 } 3175 3176 #ifdef CONFIG_PM 3177 - static int 3178 - jme_suspend(struct pci_dev *pdev, pm_message_t state) 3179 { 3180 struct net_device *netdev = pci_get_drvdata(pdev); 3181 struct jme_adapter *jme = netdev_priv(netdev); 3182 ··· 3208 tasklet_hi_enable(&jme->rxclean_task); 3209 tasklet_hi_enable(&jme->rxempty_task); 3210 3211 - pci_save_state(pdev); 3212 jme_powersave_phy(jme); 3213 - pci_enable_wake(jme->pdev, PCI_D3hot, true); 3214 - pci_set_power_state(pdev, PCI_D3hot); 3215 3216 return 0; 3217 } 3218 3219 - static int 3220 - jme_resume(struct pci_dev *pdev) 3221 { 3222 struct net_device *netdev = pci_get_drvdata(pdev); 3223 struct jme_adapter *jme = netdev_priv(netdev); 3224 3225 - jme_clear_pm(jme); 3226 - pci_restore_state(pdev); 3227 3228 jme_phy_on(jme); 3229 if (test_bit(JME_FLAG_SSET, &jme->flags)) ··· 3236 3237 return 0; 3238 } 3239 #endif 3240 3241 static DEFINE_PCI_DEVICE_TABLE(jme_pci_tbl) = { ··· 3256 .id_table = jme_pci_tbl, 3257 .probe = jme_init_one, 3258 .remove = __devexit_p(jme_remove_one), 3259 - #ifdef CONFIG_PM 3260 - .suspend = jme_suspend, 3261 - .resume = jme_resume, 3262 - #endif /* CONFIG_PM */ 3263 .shutdown = jme_shutdown, 3264 }; 3265 3266 static int __init
··· 273 { 274 jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs); 275 pci_set_power_state(jme->pdev, PCI_D0); 276 + device_set_wakeup_enable(&jme->pdev->dev, false); 277 } 278 279 static int ··· 2538 2539 jwrite32(jme, JME_PMCS, jme->reg_pmcs); 2540 2541 + device_set_wakeup_enable(&jme->pdev->dev, jme->reg_pmcs); 2542 + 2543 return 0; 2544 } 2545 ··· 3172 } 3173 3174 #ifdef CONFIG_PM 3175 + static int jme_suspend(struct device *dev) 3176 { 3177 + struct pci_dev *pdev = to_pci_dev(dev); 3178 struct net_device *netdev = pci_get_drvdata(pdev); 3179 struct jme_adapter *jme = netdev_priv(netdev); 3180 ··· 3206 tasklet_hi_enable(&jme->rxclean_task); 3207 tasklet_hi_enable(&jme->rxempty_task); 3208 3209 jme_powersave_phy(jme); 3210 3211 return 0; 3212 } 3213 3214 + static int jme_resume(struct device *dev) 3215 { 3216 + struct pci_dev *pdev = to_pci_dev(dev); 3217 struct net_device *netdev = pci_get_drvdata(pdev); 3218 struct jme_adapter *jme = netdev_priv(netdev); 3219 3220 + jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs); 3221 3222 jme_phy_on(jme); 3223 if (test_bit(JME_FLAG_SSET, &jme->flags)) ··· 3238 3239 return 0; 3240 } 3241 + 3242 + static SIMPLE_DEV_PM_OPS(jme_pm_ops, jme_suspend, jme_resume); 3243 + #define JME_PM_OPS (&jme_pm_ops) 3244 + 3245 + #else 3246 + 3247 + #define JME_PM_OPS NULL 3248 #endif 3249 3250 static DEFINE_PCI_DEVICE_TABLE(jme_pci_tbl) = { ··· 3251 .id_table = jme_pci_tbl, 3252 .probe = jme_init_one, 3253 .remove = __devexit_p(jme_remove_one), 3254 .shutdown = jme_shutdown, 3255 + .driver.pm = JME_PM_OPS, 3256 }; 3257 3258 static int __init
+1 -1
drivers/net/ksz884x.c
··· 4898 goto unlock; 4899 } 4900 skb_copy_and_csum_dev(org_skb, skb->data); 4901 - org_skb->ip_summed = 0; 4902 skb->len = org_skb->len; 4903 copy_old_skb(org_skb, skb); 4904 }
··· 4898 goto unlock; 4899 } 4900 skb_copy_and_csum_dev(org_skb, skb->data); 4901 + org_skb->ip_summed = CHECKSUM_NONE; 4902 skb->len = org_skb->len; 4903 copy_old_skb(org_skb, skb); 4904 }
+3
drivers/net/mlx4/en_netdev.c
··· 742 0, MLX4_PROT_ETH)) 743 mlx4_warn(mdev, "Failed Attaching Broadcast\n"); 744 745 /* Schedule multicast task to populate multicast list */ 746 queue_work(mdev->workqueue, &priv->mcast_task); 747
··· 742 0, MLX4_PROT_ETH)) 743 mlx4_warn(mdev, "Failed Attaching Broadcast\n"); 744 745 + /* Must redo promiscuous mode setup. */ 746 + priv->flags &= ~(MLX4_EN_FLAG_PROMISC | MLX4_EN_FLAG_MC_PROMISC); 747 + 748 /* Schedule multicast task to populate multicast list */ 749 queue_work(mdev->workqueue, &priv->mcast_task); 750
+23 -14
drivers/net/myri10ge/myri10ge.c
··· 1312 * page into an skb */ 1313 1314 static inline int 1315 - myri10ge_rx_done(struct myri10ge_slice_state *ss, struct myri10ge_rx_buf *rx, 1316 - int bytes, int len, __wsum csum) 1317 { 1318 struct myri10ge_priv *mgp = ss->mgp; 1319 struct sk_buff *skb; 1320 struct skb_frag_struct rx_frags[MYRI10GE_MAX_FRAGS_PER_FRAME]; 1321 - int i, idx, hlen, remainder; 1322 struct pci_dev *pdev = mgp->pdev; 1323 struct net_device *dev = mgp->dev; 1324 u8 *va; 1325 1326 len += MXGEFW_PAD; 1327 idx = rx->cnt & rx->mask; ··· 1350 remainder -= MYRI10GE_ALLOC_SIZE; 1351 } 1352 1353 - if (dev->features & NETIF_F_LRO) { 1354 rx_frags[0].page_offset += MXGEFW_PAD; 1355 rx_frags[0].size -= MXGEFW_PAD; 1356 len -= MXGEFW_PAD; ··· 1472 { 1473 struct myri10ge_rx_done *rx_done = &ss->rx_done; 1474 struct myri10ge_priv *mgp = ss->mgp; 1475 - struct net_device *netdev = mgp->dev; 1476 unsigned long rx_bytes = 0; 1477 unsigned long rx_packets = 0; 1478 unsigned long rx_ok; ··· 1483 u16 length; 1484 __wsum checksum; 1485 1486 while (rx_done->entry[idx].length != 0 && work_done < budget) { 1487 length = ntohs(rx_done->entry[idx].length); 1488 rx_done->entry[idx].length = 0; 1489 checksum = csum_unfold(rx_done->entry[idx].checksum); 1490 - if (length <= mgp->small_bytes) 1491 - rx_ok = myri10ge_rx_done(ss, &ss->rx_small, 1492 - mgp->small_bytes, 1493 - length, checksum); 1494 - else 1495 - rx_ok = myri10ge_rx_done(ss, &ss->rx_big, 1496 - mgp->big_bytes, 1497 - length, checksum); 1498 rx_packets += rx_ok; 1499 rx_bytes += rx_ok * (unsigned long)length; 1500 cnt++; ··· 1506 ss->stats.rx_packets += rx_packets; 1507 ss->stats.rx_bytes += rx_bytes; 1508 1509 - if (netdev->features & NETIF_F_LRO) 1510 lro_flush_all(&rx_done->lro_mgr); 1511 1512 /* restock receive rings if needed */
··· 1312 * page into an skb */ 1313 1314 static inline int 1315 + myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum, 1316 + int lro_enabled) 1317 { 1318 struct myri10ge_priv *mgp = ss->mgp; 1319 struct sk_buff *skb; 1320 struct skb_frag_struct rx_frags[MYRI10GE_MAX_FRAGS_PER_FRAME]; 1321 + struct myri10ge_rx_buf *rx; 1322 + int i, idx, hlen, remainder, bytes; 1323 struct pci_dev *pdev = mgp->pdev; 1324 struct net_device *dev = mgp->dev; 1325 u8 *va; 1326 + 1327 + if (len <= mgp->small_bytes) { 1328 + rx = &ss->rx_small; 1329 + bytes = mgp->small_bytes; 1330 + } else { 1331 + rx = &ss->rx_big; 1332 + bytes = mgp->big_bytes; 1333 + } 1334 1335 len += MXGEFW_PAD; 1336 idx = rx->cnt & rx->mask; ··· 1341 remainder -= MYRI10GE_ALLOC_SIZE; 1342 } 1343 1344 + if (lro_enabled) { 1345 rx_frags[0].page_offset += MXGEFW_PAD; 1346 rx_frags[0].size -= MXGEFW_PAD; 1347 len -= MXGEFW_PAD; ··· 1463 { 1464 struct myri10ge_rx_done *rx_done = &ss->rx_done; 1465 struct myri10ge_priv *mgp = ss->mgp; 1466 + 1467 unsigned long rx_bytes = 0; 1468 unsigned long rx_packets = 0; 1469 unsigned long rx_ok; ··· 1474 u16 length; 1475 __wsum checksum; 1476 1477 + /* 1478 + * Prevent compiler from generating more than one ->features memory 1479 + * access to avoid theoretical race condition with functions that 1480 + * change NETIF_F_LRO flag at runtime. 1481 + */ 1482 + bool lro_enabled = ACCESS_ONCE(mgp->dev->features) & NETIF_F_LRO; 1483 + 1484 while (rx_done->entry[idx].length != 0 && work_done < budget) { 1485 length = ntohs(rx_done->entry[idx].length); 1486 rx_done->entry[idx].length = 0; 1487 checksum = csum_unfold(rx_done->entry[idx].checksum); 1488 + rx_ok = myri10ge_rx_done(ss, length, checksum, lro_enabled); 1489 rx_packets += rx_ok; 1490 rx_bytes += rx_ok * (unsigned long)length; 1491 cnt++; ··· 1497 ss->stats.rx_packets += rx_packets; 1498 ss->stats.rx_bytes += rx_bytes; 1499 1500 + if (lro_enabled) 1501 lro_flush_all(&rx_done->lro_mgr); 1502 1503 /* restock receive rings if needed */
+1 -1
drivers/net/netxen/netxen_nic_ethtool.c
··· 871 struct netxen_adapter *adapter = netdev_priv(netdev); 872 int hw_lro; 873 874 - if (data & ~ETH_FLAG_LRO) 875 return -EINVAL; 876 877 if (!(adapter->capabilities & NX_FW_CAPABILITY_HW_LRO))
··· 871 struct netxen_adapter *adapter = netdev_priv(netdev); 872 int hw_lro; 873 874 + if (ethtool_invalid_flags(netdev, data, ETH_FLAG_LRO)) 875 return -EINVAL; 876 877 if (!(adapter->capabilities & NX_FW_CAPABILITY_HW_LRO))
+1 -1
drivers/net/qlcnic/qlcnic_ethtool.c
··· 1003 struct qlcnic_adapter *adapter = netdev_priv(netdev); 1004 int hw_lro; 1005 1006 - if (data & ~ETH_FLAG_LRO) 1007 return -EINVAL; 1008 1009 if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO))
··· 1003 struct qlcnic_adapter *adapter = netdev_priv(netdev); 1004 int hw_lro; 1005 1006 + if (ethtool_invalid_flags(netdev, data, ETH_FLAG_LRO)) 1007 return -EINVAL; 1008 1009 if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO))
+1 -1
drivers/net/s2io.c
··· 6726 int rc = 0; 6727 int changed = 0; 6728 6729 - if (data & ~ETH_FLAG_LRO) 6730 return -EINVAL; 6731 6732 if (data & ETH_FLAG_LRO) {
··· 6726 int rc = 0; 6727 int changed = 0; 6728 6729 + if (ethtool_invalid_flags(dev, data, ETH_FLAG_LRO)) 6730 return -EINVAL; 6731 6732 if (data & ETH_FLAG_LRO) {
+3 -3
drivers/net/tg3.c
··· 48 #include <net/ip.h> 49 50 #include <asm/system.h> 51 - #include <asm/io.h> 52 #include <asm/byteorder.h> 53 - #include <asm/uaccess.h> 54 55 #ifdef CONFIG_SPARC 56 #include <asm/idprom.h> ··· 13118 13119 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *); 13120 13121 - static void inline vlan_features_add(struct net_device *dev, unsigned long flags) 13122 { 13123 dev->vlan_features |= flags; 13124 }
··· 48 #include <net/ip.h> 49 50 #include <asm/system.h> 51 + #include <linux/io.h> 52 #include <asm/byteorder.h> 53 + #include <linux/uaccess.h> 54 55 #ifdef CONFIG_SPARC 56 #include <asm/idprom.h> ··· 13118 13119 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *); 13120 13121 + static inline void vlan_features_add(struct net_device *dev, unsigned long flags) 13122 { 13123 dev->vlan_features |= flags; 13124 }
+2 -2
drivers/net/vmxnet3/vmxnet3_ethtool.c
··· 304 u8 lro_present = (netdev->features & NETIF_F_LRO) == 0 ? 0 : 1; 305 unsigned long flags; 306 307 - if (data & ~ETH_FLAG_LRO) 308 - return -EOPNOTSUPP; 309 310 if (lro_requested ^ lro_present) { 311 /* toggle the LRO feature*/
··· 304 u8 lro_present = (netdev->features & NETIF_F_LRO) == 0 ? 0 : 1; 305 unsigned long flags; 306 307 + if (ethtool_invalid_flags(netdev, data, ETH_FLAG_LRO)) 308 + return -EINVAL; 309 310 if (lro_requested ^ lro_present) { 311 /* toggle the LRO feature*/
+2 -2
drivers/net/vxge/vxge-ethtool.c
··· 1117 struct vxgedev *vdev = netdev_priv(dev); 1118 enum vxge_hw_status status; 1119 1120 - if (data & ~ETH_FLAG_RXHASH) 1121 - return -EOPNOTSUPP; 1122 1123 if (!!(data & ETH_FLAG_RXHASH) == vdev->devh->config.rth_en) 1124 return 0;
··· 1117 struct vxgedev *vdev = netdev_priv(dev); 1118 enum vxge_hw_status status; 1119 1120 + if (ethtool_invalid_flags(dev, data, ETH_FLAG_RXHASH)) 1121 + return -EINVAL; 1122 1123 if (!!(data & ETH_FLAG_RXHASH) == vdev->devh->config.rth_en) 1124 return 0;
+5 -4
include/linux/can/core.h
··· 36 * @prot: pointer to struct proto structure. 37 */ 38 struct can_proto { 39 - int type; 40 - int protocol; 41 - struct proto_ops *ops; 42 - struct proto *prot; 43 }; 44 45 /* function prototypes for the CAN networklayer core (af_can.c) */ ··· 58 void *data); 59 60 extern int can_send(struct sk_buff *skb, int loop); 61 62 #endif /* CAN_CORE_H */
··· 36 * @prot: pointer to struct proto structure. 37 */ 38 struct can_proto { 39 + int type; 40 + int protocol; 41 + const struct proto_ops *ops; 42 + struct proto *prot; 43 }; 44 45 /* function prototypes for the CAN networklayer core (af_can.c) */ ··· 58 void *data); 59 60 extern int can_send(struct sk_buff *skb, int loop); 61 + extern int can_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); 62 63 #endif /* CAN_CORE_H */
+1
include/linux/ethtool.h
··· 680 u32 ethtool_op_get_flags(struct net_device *dev); 681 int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported); 682 void ethtool_ntuple_flush(struct net_device *dev); 683 684 /** 685 * &ethtool_ops - Alter and report network device settings
··· 680 u32 ethtool_op_get_flags(struct net_device *dev); 681 int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported); 682 void ethtool_ntuple_flush(struct net_device *dev); 683 + bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported); 684 685 /** 686 * &ethtool_ops - Alter and report network device settings
+7 -1
include/linux/skbuff.h
··· 122 123 struct sk_buff; 124 125 - /* To allow 64K frame to be packed as single skb without frag_list */ 126 #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) 127 128 typedef struct skb_frag_struct skb_frag_t; 129
··· 122 123 struct sk_buff; 124 125 + /* To allow 64K frame to be packed as single skb without frag_list. Since 126 + * GRO uses frags we allocate at least 16 regardless of page size. 127 + */ 128 + #if (65536/PAGE_SIZE + 2) < 16 129 + #define MAX_SKB_FRAGS 16 130 + #else 131 #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) 132 + #endif 133 134 typedef struct skb_frag_struct skb_frag_t; 135
+1 -1
include/net/dst.h
··· 345 346 static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb) 347 { 348 - struct dst_entry *child = skb_dst(skb)->child; 349 350 skb_dst_drop(skb); 351 return child;
··· 345 346 static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb) 347 { 348 + struct dst_entry *child = dst_clone(skb_dst(skb)->child); 349 350 skb_dst_drop(skb); 351 return child;
+7 -1
include/net/rose.h
··· 14 15 #define ROSE_MIN_LEN 3 16 17 #define ROSE_GFI 0x10 18 #define ROSE_Q_BIT 0x80 19 #define ROSE_D_BIT 0x40 ··· 220 extern int rose_validate_nr(struct sock *, unsigned short); 221 extern void rose_write_internal(struct sock *, int); 222 extern int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *); 223 - extern int rose_parse_facilities(unsigned char *, struct rose_facilities_struct *); 224 extern void rose_disconnect(struct sock *, int, int, int); 225 226 /* rose_timer.c */
··· 14 15 #define ROSE_MIN_LEN 3 16 17 + #define ROSE_CALL_REQ_ADDR_LEN_OFF 3 18 + #define ROSE_CALL_REQ_ADDR_LEN_VAL 0xAA /* each address is 10 digits */ 19 + #define ROSE_CALL_REQ_DEST_ADDR_OFF 4 20 + #define ROSE_CALL_REQ_SRC_ADDR_OFF 9 21 + #define ROSE_CALL_REQ_FACILITIES_OFF 14 22 + 23 #define ROSE_GFI 0x10 24 #define ROSE_Q_BIT 0x80 25 #define ROSE_D_BIT 0x40 ··· 214 extern int rose_validate_nr(struct sock *, unsigned short); 215 extern void rose_write_internal(struct sock *, int); 216 extern int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *); 217 + extern int rose_parse_facilities(unsigned char *, unsigned int, struct rose_facilities_struct *); 218 extern void rose_disconnect(struct sock *, int, int, int); 219 220 /* rose_timer.c */
+22
include/net/xfrm.h
··· 1601 } 1602 1603 #ifdef CONFIG_XFRM_MIGRATE 1604 static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig) 1605 { 1606 return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL);
··· 1601 } 1602 1603 #ifdef CONFIG_XFRM_MIGRATE 1604 + static inline int xfrm_replay_clone(struct xfrm_state *x, 1605 + struct xfrm_state *orig) 1606 + { 1607 + x->replay_esn = kzalloc(xfrm_replay_state_esn_len(orig->replay_esn), 1608 + GFP_KERNEL); 1609 + if (!x->replay_esn) 1610 + return -ENOMEM; 1611 + 1612 + x->replay_esn->bmp_len = orig->replay_esn->bmp_len; 1613 + x->replay_esn->replay_window = orig->replay_esn->replay_window; 1614 + 1615 + x->preplay_esn = kmemdup(x->replay_esn, 1616 + xfrm_replay_state_esn_len(x->replay_esn), 1617 + GFP_KERNEL); 1618 + if (!x->preplay_esn) { 1619 + kfree(x->replay_esn); 1620 + return -ENOMEM; 1621 + } 1622 + 1623 + return 0; 1624 + } 1625 + 1626 static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig) 1627 { 1628 return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL);
+5 -1
net/bridge/br_if.c
··· 389 { 390 struct net_bridge_port *p; 391 int err = 0; 392 393 /* Don't allow bridging non-ethernet like devices */ 394 if ((dev->flags & IFF_LOOPBACK) || ··· 447 list_add_rcu(&p->list, &br->port_list); 448 449 spin_lock_bh(&br->lock); 450 - br_stp_recalculate_bridge_id(br); 451 br_features_recompute(br); 452 453 if ((dev->flags & IFF_UP) && netif_carrier_ok(dev) && ··· 456 spin_unlock_bh(&br->lock); 457 458 br_ifinfo_notify(RTM_NEWLINK, p); 459 460 dev_set_mtu(br->dev, br_min_mtu(br)); 461
··· 389 { 390 struct net_bridge_port *p; 391 int err = 0; 392 + bool changed_addr; 393 394 /* Don't allow bridging non-ethernet like devices */ 395 if ((dev->flags & IFF_LOOPBACK) || ··· 446 list_add_rcu(&p->list, &br->port_list); 447 448 spin_lock_bh(&br->lock); 449 + changed_addr = br_stp_recalculate_bridge_id(br); 450 br_features_recompute(br); 451 452 if ((dev->flags & IFF_UP) && netif_carrier_ok(dev) && ··· 455 spin_unlock_bh(&br->lock); 456 457 br_ifinfo_notify(RTM_NEWLINK, p); 458 + 459 + if (changed_addr) 460 + call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); 461 462 dev_set_mtu(br->dev, br_min_mtu(br)); 463
+1 -1
net/bridge/br_private.h
··· 497 extern void br_stp_set_enabled(struct net_bridge *br, unsigned long val); 498 extern void br_stp_enable_port(struct net_bridge_port *p); 499 extern void br_stp_disable_port(struct net_bridge_port *p); 500 - extern void br_stp_recalculate_bridge_id(struct net_bridge *br); 501 extern void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); 502 extern void br_stp_set_bridge_priority(struct net_bridge *br, 503 u16 newprio);
··· 497 extern void br_stp_set_enabled(struct net_bridge *br, unsigned long val); 498 extern void br_stp_enable_port(struct net_bridge_port *p); 499 extern void br_stp_disable_port(struct net_bridge_port *p); 500 + extern bool br_stp_recalculate_bridge_id(struct net_bridge *br); 501 extern void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); 502 extern void br_stp_set_bridge_priority(struct net_bridge *br, 503 u16 newprio);
+6 -3
net/bridge/br_stp_if.c
··· 204 static const unsigned short br_mac_zero_aligned[ETH_ALEN >> 1]; 205 206 /* called under bridge lock */ 207 - void br_stp_recalculate_bridge_id(struct net_bridge *br) 208 { 209 const unsigned char *br_mac_zero = 210 (const unsigned char *)br_mac_zero_aligned; ··· 222 223 } 224 225 - if (compare_ether_addr(br->bridge_id.addr, addr)) 226 - br_stp_change_bridge_id(br, addr); 227 } 228 229 /* called under bridge lock */
··· 204 static const unsigned short br_mac_zero_aligned[ETH_ALEN >> 1]; 205 206 /* called under bridge lock */ 207 + bool br_stp_recalculate_bridge_id(struct net_bridge *br) 208 { 209 const unsigned char *br_mac_zero = 210 (const unsigned char *)br_mac_zero_aligned; ··· 222 223 } 224 225 + if (compare_ether_addr(br->bridge_id.addr, addr) == 0) 226 + return false; /* no change */ 227 + 228 + br_stp_change_bridge_id(br, addr); 229 + return true; 230 } 231 232 /* called under bridge lock */
+3 -6
net/can/af_can.c
··· 95 * af_can socket functions 96 */ 97 98 - static int can_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 99 { 100 struct sock *sk = sock->sk; 101 ··· 108 return -ENOIOCTLCMD; 109 } 110 } 111 112 static void can_sock_destruct(struct sock *sk) 113 { ··· 699 printk(KERN_ERR "can: protocol %d already registered\n", 700 proto); 701 err = -EBUSY; 702 - } else { 703 proto_tab[proto] = cp; 704 705 - /* use generic ioctl function if not defined by module */ 706 - if (!cp->ops->ioctl) 707 - cp->ops->ioctl = can_ioctl; 708 - } 709 spin_unlock(&proto_tab_lock); 710 711 if (err < 0)
··· 95 * af_can socket functions 96 */ 97 98 + int can_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 99 { 100 struct sock *sk = sock->sk; 101 ··· 108 return -ENOIOCTLCMD; 109 } 110 } 111 + EXPORT_SYMBOL(can_ioctl); 112 113 static void can_sock_destruct(struct sock *sk) 114 { ··· 698 printk(KERN_ERR "can: protocol %d already registered\n", 699 proto); 700 err = -EBUSY; 701 + } else 702 proto_tab[proto] = cp; 703 704 spin_unlock(&proto_tab_lock); 705 706 if (err < 0)
+2 -2
net/can/bcm.c
··· 1569 return size; 1570 } 1571 1572 - static struct proto_ops bcm_ops __read_mostly = { 1573 .family = PF_CAN, 1574 .release = bcm_release, 1575 .bind = sock_no_bind, ··· 1578 .accept = sock_no_accept, 1579 .getname = sock_no_getname, 1580 .poll = datagram_poll, 1581 - .ioctl = NULL, /* use can_ioctl() from af_can.c */ 1582 .listen = sock_no_listen, 1583 .shutdown = sock_no_shutdown, 1584 .setsockopt = sock_no_setsockopt,
··· 1569 return size; 1570 } 1571 1572 + static const struct proto_ops bcm_ops = { 1573 .family = PF_CAN, 1574 .release = bcm_release, 1575 .bind = sock_no_bind, ··· 1578 .accept = sock_no_accept, 1579 .getname = sock_no_getname, 1580 .poll = datagram_poll, 1581 + .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */ 1582 .listen = sock_no_listen, 1583 .shutdown = sock_no_shutdown, 1584 .setsockopt = sock_no_setsockopt,
+2 -2
net/can/raw.c
··· 742 return size; 743 } 744 745 - static struct proto_ops raw_ops __read_mostly = { 746 .family = PF_CAN, 747 .release = raw_release, 748 .bind = raw_bind, ··· 751 .accept = sock_no_accept, 752 .getname = raw_getname, 753 .poll = datagram_poll, 754 - .ioctl = NULL, /* use can_ioctl() from af_can.c */ 755 .listen = sock_no_listen, 756 .shutdown = sock_no_shutdown, 757 .setsockopt = raw_setsockopt,
··· 742 return size; 743 } 744 745 + static const struct proto_ops raw_ops = { 746 .family = PF_CAN, 747 .release = raw_release, 748 .bind = raw_bind, ··· 751 .accept = sock_no_accept, 752 .getname = raw_getname, 753 .poll = datagram_poll, 754 + .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */ 755 .listen = sock_no_listen, 756 .shutdown = sock_no_shutdown, 757 .setsockopt = raw_setsockopt,
+1 -54
net/core/dev.c
··· 1140 1141 ASSERT_RTNL(); 1142 1143 - /* 1144 - * Is it even present? 1145 - */ 1146 if (!netif_device_present(dev)) 1147 return -ENODEV; 1148 ··· 1148 if (ret) 1149 return ret; 1150 1151 - /* 1152 - * Call device private open method 1153 - */ 1154 set_bit(__LINK_STATE_START, &dev->state); 1155 1156 if (ops->ndo_validate_addr) ··· 1156 if (!ret && ops->ndo_open) 1157 ret = ops->ndo_open(dev); 1158 1159 - /* 1160 - * If it went open OK then: 1161 - */ 1162 - 1163 if (ret) 1164 clear_bit(__LINK_STATE_START, &dev->state); 1165 else { 1166 - /* 1167 - * Set the flags. 1168 - */ 1169 dev->flags |= IFF_UP; 1170 - 1171 - /* 1172 - * Enable NET_DMA 1173 - */ 1174 net_dmaengine_get(); 1175 - 1176 - /* 1177 - * Initialize multicasting status 1178 - */ 1179 dev_set_rx_mode(dev); 1180 - 1181 - /* 1182 - * Wakeup transmit queue engine 1183 - */ 1184 dev_activate(dev); 1185 } 1186 ··· 1184 { 1185 int ret; 1186 1187 - /* 1188 - * Is it already up? 1189 - */ 1190 if (dev->flags & IFF_UP) 1191 return 0; 1192 1193 - /* 1194 - * Open device 1195 - */ 1196 ret = __dev_open(dev); 1197 if (ret < 0) 1198 return ret; 1199 1200 - /* 1201 - * ... and announce new interface. 1202 - */ 1203 rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING); 1204 call_netdevice_notifiers(NETDEV_UP, dev); 1205 ··· 1206 might_sleep(); 1207 1208 list_for_each_entry(dev, head, unreg_list) { 1209 - /* 1210 - * Tell people we are going down, so that they can 1211 - * prepare to death, when device is still operating. 1212 - */ 1213 call_netdevice_notifiers(NETDEV_GOING_DOWN, dev); 1214 1215 clear_bit(__LINK_STATE_START, &dev->state); ··· 1234 if (ops->ndo_stop) 1235 ops->ndo_stop(dev); 1236 1237 - /* 1238 - * Device is now down. 1239 - */ 1240 - 1241 dev->flags &= ~IFF_UP; 1242 - 1243 - /* 1244 - * Shutdown NET_DMA 1245 - */ 1246 net_dmaengine_put(); 1247 } 1248 ··· 1263 1264 __dev_close_many(head); 1265 1266 - /* 1267 - * Tell people we are down 1268 - */ 1269 list_for_each_entry(dev, head, unreg_list) { 1270 rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING); 1271 call_netdevice_notifiers(NETDEV_DOWN, dev); ··· 1321 1322 1323 static int dev_boot_phase = 1; 1324 - 1325 - /* 1326 - * Device change register/unregister. These are not inline or static 1327 - * as we export them to the world. 1328 - */ 1329 1330 /** 1331 * register_netdevice_notifier - register a network notifier block ··· 1423 ASSERT_RTNL(); 1424 return raw_notifier_call_chain(&netdev_chain, val, dev); 1425 } 1426 1427 /* When > 0 there are consumers of rx skb time stamps */ 1428 static atomic_t netstamp_needed = ATOMIC_INIT(0);
··· 1140 1141 ASSERT_RTNL(); 1142 1143 if (!netif_device_present(dev)) 1144 return -ENODEV; 1145 ··· 1151 if (ret) 1152 return ret; 1153 1154 set_bit(__LINK_STATE_START, &dev->state); 1155 1156 if (ops->ndo_validate_addr) ··· 1162 if (!ret && ops->ndo_open) 1163 ret = ops->ndo_open(dev); 1164 1165 if (ret) 1166 clear_bit(__LINK_STATE_START, &dev->state); 1167 else { 1168 dev->flags |= IFF_UP; 1169 net_dmaengine_get(); 1170 dev_set_rx_mode(dev); 1171 dev_activate(dev); 1172 } 1173 ··· 1209 { 1210 int ret; 1211 1212 if (dev->flags & IFF_UP) 1213 return 0; 1214 1215 ret = __dev_open(dev); 1216 if (ret < 0) 1217 return ret; 1218 1219 rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING); 1220 call_netdevice_notifiers(NETDEV_UP, dev); 1221 ··· 1240 might_sleep(); 1241 1242 list_for_each_entry(dev, head, unreg_list) { 1243 call_netdevice_notifiers(NETDEV_GOING_DOWN, dev); 1244 1245 clear_bit(__LINK_STATE_START, &dev->state); ··· 1272 if (ops->ndo_stop) 1273 ops->ndo_stop(dev); 1274 1275 dev->flags &= ~IFF_UP; 1276 net_dmaengine_put(); 1277 } 1278 ··· 1309 1310 __dev_close_many(head); 1311 1312 list_for_each_entry(dev, head, unreg_list) { 1313 rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING); 1314 call_netdevice_notifiers(NETDEV_DOWN, dev); ··· 1370 1371 1372 static int dev_boot_phase = 1; 1373 1374 /** 1375 * register_netdevice_notifier - register a network notifier block ··· 1477 ASSERT_RTNL(); 1478 return raw_notifier_call_chain(&netdev_chain, val, dev); 1479 } 1480 + EXPORT_SYMBOL(call_netdevice_notifiers); 1481 1482 /* When > 0 there are consumers of rx skb time stamps */ 1483 static atomic_t netstamp_needed = ATOMIC_INIT(0);
+16 -1
net/core/ethtool.c
··· 141 } 142 EXPORT_SYMBOL(ethtool_op_get_flags); 143 144 int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported) 145 { 146 - if (data & ~supported) 147 return -EINVAL; 148 149 dev->features = ((dev->features & ~flags_dup_features) |
··· 141 } 142 EXPORT_SYMBOL(ethtool_op_get_flags); 143 144 + /* Check if device can enable (or disable) particular feature coded in "data" 145 + * argument. Flags "supported" describe features that can be toggled by device. 146 + * If feature can not be toggled, it state (enabled or disabled) must match 147 + * hardcoded device features state, otherwise flags are marked as invalid. 148 + */ 149 + bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported) 150 + { 151 + u32 features = dev->features & flags_dup_features; 152 + /* "data" can contain only flags_dup_features bits, 153 + * see __ethtool_set_flags */ 154 + 155 + return (features & ~supported) != (data & ~supported); 156 + } 157 + EXPORT_SYMBOL(ethtool_invalid_flags); 158 + 159 int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported) 160 { 161 + if (ethtool_invalid_flags(dev, data, supported)) 162 return -EINVAL; 163 164 dev->features = ((dev->features & ~flags_dup_features) |
+2 -2
net/ipv4/fib_trie.c
··· 1365 err = fib_props[fa->fa_type].error; 1366 if (err) { 1367 #ifdef CONFIG_IP_FIB_TRIE_STATS 1368 - t->stats.semantic_match_miss++; 1369 #endif 1370 - return 1; 1371 } 1372 if (fi->fib_flags & RTNH_F_DEAD) 1373 continue;
··· 1365 err = fib_props[fa->fa_type].error; 1366 if (err) { 1367 #ifdef CONFIG_IP_FIB_TRIE_STATS 1368 + t->stats.semantic_match_passed++; 1369 #endif 1370 + return err; 1371 } 1372 if (fi->fib_flags & RTNH_F_DEAD) 1373 continue;
+3 -3
net/ipv4/ip_options.c
··· 140 } else { 141 dopt->ts_needtime = 0; 142 143 - if (soffset + 8 <= optlen) { 144 __be32 addr; 145 146 - memcpy(&addr, sptr+soffset-1, 4); 147 - if (inet_addr_type(dev_net(skb_dst(skb)->dev), addr) != RTN_LOCAL) { 148 dopt->ts_needtime = 1; 149 soffset += 8; 150 }
··· 140 } else { 141 dopt->ts_needtime = 0; 142 143 + if (soffset + 7 <= optlen) { 144 __be32 addr; 145 146 + memcpy(&addr, dptr+soffset-1, 4); 147 + if (inet_addr_type(dev_net(skb_dst(skb)->dev), addr) != RTN_UNICAST) { 148 dopt->ts_needtime = 1; 149 soffset += 8; 150 }
+1
net/ipv4/raw.c
··· 569 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); 570 if (IS_ERR(rt)) { 571 err = PTR_ERR(rt); 572 goto done; 573 } 574 }
··· 569 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); 570 if (IS_ERR(rt)) { 571 err = PTR_ERR(rt); 572 + rt = NULL; 573 goto done; 574 } 575 }
+1 -1
net/ipv6/ip6mr.c
··· 663 skb_pull(skb, (u8 *)encap - skb->data); 664 skb_reset_network_header(skb); 665 skb->protocol = htons(ETH_P_IPV6); 666 - skb->ip_summed = 0; 667 skb->pkt_type = PACKET_HOST; 668 669 skb_tunnel_rx(skb, reg_dev);
··· 663 skb_pull(skb, (u8 *)encap - skb->data); 664 skb_reset_network_header(skb); 665 skb->protocol = htons(ETH_P_IPV6); 666 + skb->ip_summed = CHECKSUM_NONE; 667 skb->pkt_type = PACKET_HOST; 668 669 skb_tunnel_rx(skb, reg_dev);
+6
net/irda/iriap.c
··· 656 n = 1; 657 658 name_len = fp[n++]; 659 memcpy(name, fp+n, name_len); n+=name_len; 660 name[name_len] = '\0'; 661 662 attr_len = fp[n++]; 663 memcpy(attr, fp+n, attr_len); n+=attr_len; 664 attr[attr_len] = '\0'; 665
··· 656 n = 1; 657 658 name_len = fp[n++]; 659 + 660 + IRDA_ASSERT(name_len < IAS_MAX_CLASSNAME + 1, return;); 661 + 662 memcpy(name, fp+n, name_len); n+=name_len; 663 name[name_len] = '\0'; 664 665 attr_len = fp[n++]; 666 + 667 + IRDA_ASSERT(attr_len < IAS_MAX_ATTRIBNAME + 1, return;); 668 + 669 memcpy(attr, fp+n, attr_len); n+=attr_len; 670 attr[attr_len] = '\0'; 671
+3
net/irda/irnet/irnet_ppp.c
··· 105 while(isspace(start[length - 1])) 106 length--; 107 108 /* Copy the name for later reuse */ 109 memcpy(ap->rname, start + 5, length - 5); 110 ap->rname[length - 5] = '\0';
··· 105 while(isspace(start[length - 1])) 106 length--; 107 108 + DABORT(length < 5 || length > NICKNAME_MAX_LEN + 5, 109 + -EINVAL, CTRL_ERROR, "Invalid nickname.\n"); 110 + 111 /* Copy the name for later reuse */ 112 memcpy(ap->rname, start + 5, length - 5); 113 ap->rname[length - 5] = '\0';
+4 -4
net/rose/af_rose.c
··· 978 struct sock *make; 979 struct rose_sock *make_rose; 980 struct rose_facilities_struct facilities; 981 - int n, len; 982 983 skb->sk = NULL; /* Initially we don't know who it's for */ 984 ··· 987 */ 988 memset(&facilities, 0x00, sizeof(struct rose_facilities_struct)); 989 990 - len = (((skb->data[3] >> 4) & 0x0F) + 1) >> 1; 991 - len += (((skb->data[3] >> 0) & 0x0F) + 1) >> 1; 992 - if (!rose_parse_facilities(skb->data + len + 4, &facilities)) { 993 rose_transmit_clear_request(neigh, lci, ROSE_INVALID_FACILITY, 76); 994 return 0; 995 }
··· 978 struct sock *make; 979 struct rose_sock *make_rose; 980 struct rose_facilities_struct facilities; 981 + int n; 982 983 skb->sk = NULL; /* Initially we don't know who it's for */ 984 ··· 987 */ 988 memset(&facilities, 0x00, sizeof(struct rose_facilities_struct)); 989 990 + if (!rose_parse_facilities(skb->data + ROSE_CALL_REQ_FACILITIES_OFF, 991 + skb->len - ROSE_CALL_REQ_FACILITIES_OFF, 992 + &facilities)) { 993 rose_transmit_clear_request(neigh, lci, ROSE_INVALID_FACILITY, 76); 994 return 0; 995 }
+12 -1
net/rose/rose_loopback.c
··· 73 unsigned int lci_i, lci_o; 74 75 while ((skb = skb_dequeue(&loopback_queue)) != NULL) { 76 lci_i = ((skb->data[0] << 8) & 0xF00) + ((skb->data[1] << 0) & 0x0FF); 77 frametype = skb->data[2]; 78 - dest = (rose_address *)(skb->data + 4); 79 lci_o = ROSE_DEFAULT_MAXVC + 1 - lci_i; 80 81 skb_reset_transport_header(skb);
··· 73 unsigned int lci_i, lci_o; 74 75 while ((skb = skb_dequeue(&loopback_queue)) != NULL) { 76 + if (skb->len < ROSE_MIN_LEN) { 77 + kfree_skb(skb); 78 + continue; 79 + } 80 lci_i = ((skb->data[0] << 8) & 0xF00) + ((skb->data[1] << 0) & 0x0FF); 81 frametype = skb->data[2]; 82 + if (frametype == ROSE_CALL_REQUEST && 83 + (skb->len <= ROSE_CALL_REQ_FACILITIES_OFF || 84 + skb->data[ROSE_CALL_REQ_ADDR_LEN_OFF] != 85 + ROSE_CALL_REQ_ADDR_LEN_VAL)) { 86 + kfree_skb(skb); 87 + continue; 88 + } 89 + dest = (rose_address *)(skb->data + ROSE_CALL_REQ_DEST_ADDR_OFF); 90 lci_o = ROSE_DEFAULT_MAXVC + 1 - lci_i; 91 92 skb_reset_transport_header(skb);
+13 -7
net/rose/rose_route.c
··· 861 unsigned int lci, new_lci; 862 unsigned char cause, diagnostic; 863 struct net_device *dev; 864 - int len, res = 0; 865 char buf[11]; 866 867 #if 0 ··· 869 return res; 870 #endif 871 872 frametype = skb->data[2]; 873 lci = ((skb->data[0] << 8) & 0xF00) + ((skb->data[1] << 0) & 0x0FF); 874 - src_addr = (rose_address *)(skb->data + 9); 875 - dest_addr = (rose_address *)(skb->data + 4); 876 877 spin_lock_bh(&rose_neigh_list_lock); 878 spin_lock_bh(&rose_route_list_lock); ··· 1017 goto out; 1018 } 1019 1020 - len = (((skb->data[3] >> 4) & 0x0F) + 1) >> 1; 1021 - len += (((skb->data[3] >> 0) & 0x0F) + 1) >> 1; 1022 - 1023 memset(&facilities, 0x00, sizeof(struct rose_facilities_struct)); 1024 1025 - if (!rose_parse_facilities(skb->data + len + 4, &facilities)) { 1026 rose_transmit_clear_request(rose_neigh, lci, ROSE_INVALID_FACILITY, 76); 1027 goto out; 1028 }
··· 861 unsigned int lci, new_lci; 862 unsigned char cause, diagnostic; 863 struct net_device *dev; 864 + int res = 0; 865 char buf[11]; 866 867 #if 0 ··· 869 return res; 870 #endif 871 872 + if (skb->len < ROSE_MIN_LEN) 873 + return res; 874 frametype = skb->data[2]; 875 lci = ((skb->data[0] << 8) & 0xF00) + ((skb->data[1] << 0) & 0x0FF); 876 + if (frametype == ROSE_CALL_REQUEST && 877 + (skb->len <= ROSE_CALL_REQ_FACILITIES_OFF || 878 + skb->data[ROSE_CALL_REQ_ADDR_LEN_OFF] != 879 + ROSE_CALL_REQ_ADDR_LEN_VAL)) 880 + return res; 881 + src_addr = (rose_address *)(skb->data + ROSE_CALL_REQ_SRC_ADDR_OFF); 882 + dest_addr = (rose_address *)(skb->data + ROSE_CALL_REQ_DEST_ADDR_OFF); 883 884 spin_lock_bh(&rose_neigh_list_lock); 885 spin_lock_bh(&rose_route_list_lock); ··· 1010 goto out; 1011 } 1012 1013 memset(&facilities, 0x00, sizeof(struct rose_facilities_struct)); 1014 1015 + if (!rose_parse_facilities(skb->data + ROSE_CALL_REQ_FACILITIES_OFF, 1016 + skb->len - ROSE_CALL_REQ_FACILITIES_OFF, 1017 + &facilities)) { 1018 rose_transmit_clear_request(rose_neigh, lci, ROSE_INVALID_FACILITY, 76); 1019 goto out; 1020 }
+66 -29
net/rose/rose_subr.c
··· 142 *dptr++ = ROSE_GFI | lci1; 143 *dptr++ = lci2; 144 *dptr++ = frametype; 145 - *dptr++ = 0xAA; 146 memcpy(dptr, &rose->dest_addr, ROSE_ADDR_LEN); 147 dptr += ROSE_ADDR_LEN; 148 memcpy(dptr, &rose->source_addr, ROSE_ADDR_LEN); ··· 246 do { 247 switch (*p & 0xC0) { 248 case 0x00: 249 p += 2; 250 n += 2; 251 len -= 2; 252 break; 253 254 case 0x40: 255 if (*p == FAC_NATIONAL_RAND) 256 facilities->rand = ((p[1] << 8) & 0xFF00) + ((p[2] << 0) & 0x00FF); 257 p += 3; ··· 264 break; 265 266 case 0x80: 267 p += 4; 268 n += 4; 269 len -= 4; 270 break; 271 272 case 0xC0: 273 l = p[1]; 274 if (*p == FAC_NATIONAL_DEST_DIGI) { 275 if (!fac_national_digis_received) { 276 memcpy(&facilities->source_digis[0], p + 2, AX25_ADDR_LEN); 277 facilities->source_ndigis = 1; 278 } 279 } 280 else if (*p == FAC_NATIONAL_SRC_DIGI) { 281 if (!fac_national_digis_received) { 282 memcpy(&facilities->dest_digis[0], p + 2, AX25_ADDR_LEN); 283 facilities->dest_ndigis = 1; 284 } 285 } 286 else if (*p == FAC_NATIONAL_FAIL_CALL) { 287 memcpy(&facilities->fail_call, p + 2, AX25_ADDR_LEN); 288 } 289 else if (*p == FAC_NATIONAL_FAIL_ADD) { 290 memcpy(&facilities->fail_addr, p + 3, ROSE_ADDR_LEN); 291 } 292 else if (*p == FAC_NATIONAL_DIGIS) { 293 fac_national_digis_received = 1; 294 facilities->source_ndigis = 0; 295 facilities->dest_ndigis = 0; 296 for (pt = p + 2, lg = 0 ; lg < l ; pt += AX25_ADDR_LEN, lg += AX25_ADDR_LEN) { 297 - if (pt[6] & AX25_HBIT) 298 memcpy(&facilities->dest_digis[facilities->dest_ndigis++], pt, AX25_ADDR_LEN); 299 - else 300 memcpy(&facilities->source_digis[facilities->source_ndigis++], pt, AX25_ADDR_LEN); 301 } 302 } 303 p += l + 2; ··· 339 do { 340 switch (*p & 0xC0) { 341 case 0x00: 342 p += 2; 343 n += 2; 344 len -= 2; 345 break; 346 347 case 0x40: 348 p += 3; 349 n += 3; 350 len -= 3; 351 break; 352 353 case 0x80: 354 p += 4; 355 n += 4; 356 len -= 4; 357 break; 358 359 case 0xC0: 360 l = p[1]; 361 if (*p == FAC_CCITT_DEST_NSAP) { 362 memcpy(&facilities->source_addr, p + 7, ROSE_ADDR_LEN); 363 memcpy(callsign, p + 12, l - 10); ··· 393 return n; 394 } 395 396 - int rose_parse_facilities(unsigned char *p, 397 struct rose_facilities_struct *facilities) 398 { 399 int facilities_len, len; 400 401 facilities_len = *p++; 402 403 - if (facilities_len == 0) 404 return 0; 405 406 - while (facilities_len > 0) { 407 - if (*p == 0x00) { 408 - facilities_len--; 409 - p++; 410 411 - switch (*p) { 412 - case FAC_NATIONAL: /* National */ 413 - len = rose_parse_national(p + 1, facilities, facilities_len - 1); 414 - facilities_len -= len + 1; 415 - p += len + 1; 416 - break; 417 418 - case FAC_CCITT: /* CCITT */ 419 - len = rose_parse_ccitt(p + 1, facilities, facilities_len - 1); 420 - facilities_len -= len + 1; 421 - p += len + 1; 422 - break; 423 424 - default: 425 - printk(KERN_DEBUG "ROSE: rose_parse_facilities - unknown facilities family %02X\n", *p); 426 - facilities_len--; 427 - p++; 428 - break; 429 - } 430 - } else 431 - break; /* Error in facilities format */ 432 } 433 434 - return 1; 435 } 436 437 static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
··· 142 *dptr++ = ROSE_GFI | lci1; 143 *dptr++ = lci2; 144 *dptr++ = frametype; 145 + *dptr++ = ROSE_CALL_REQ_ADDR_LEN_VAL; 146 memcpy(dptr, &rose->dest_addr, ROSE_ADDR_LEN); 147 dptr += ROSE_ADDR_LEN; 148 memcpy(dptr, &rose->source_addr, ROSE_ADDR_LEN); ··· 246 do { 247 switch (*p & 0xC0) { 248 case 0x00: 249 + if (len < 2) 250 + return -1; 251 p += 2; 252 n += 2; 253 len -= 2; 254 break; 255 256 case 0x40: 257 + if (len < 3) 258 + return -1; 259 if (*p == FAC_NATIONAL_RAND) 260 facilities->rand = ((p[1] << 8) & 0xFF00) + ((p[2] << 0) & 0x00FF); 261 p += 3; ··· 260 break; 261 262 case 0x80: 263 + if (len < 4) 264 + return -1; 265 p += 4; 266 n += 4; 267 len -= 4; 268 break; 269 270 case 0xC0: 271 + if (len < 2) 272 + return -1; 273 l = p[1]; 274 + if (len < 2 + l) 275 + return -1; 276 if (*p == FAC_NATIONAL_DEST_DIGI) { 277 if (!fac_national_digis_received) { 278 + if (l < AX25_ADDR_LEN) 279 + return -1; 280 memcpy(&facilities->source_digis[0], p + 2, AX25_ADDR_LEN); 281 facilities->source_ndigis = 1; 282 } 283 } 284 else if (*p == FAC_NATIONAL_SRC_DIGI) { 285 if (!fac_national_digis_received) { 286 + if (l < AX25_ADDR_LEN) 287 + return -1; 288 memcpy(&facilities->dest_digis[0], p + 2, AX25_ADDR_LEN); 289 facilities->dest_ndigis = 1; 290 } 291 } 292 else if (*p == FAC_NATIONAL_FAIL_CALL) { 293 + if (l < AX25_ADDR_LEN) 294 + return -1; 295 memcpy(&facilities->fail_call, p + 2, AX25_ADDR_LEN); 296 } 297 else if (*p == FAC_NATIONAL_FAIL_ADD) { 298 + if (l < 1 + ROSE_ADDR_LEN) 299 + return -1; 300 memcpy(&facilities->fail_addr, p + 3, ROSE_ADDR_LEN); 301 } 302 else if (*p == FAC_NATIONAL_DIGIS) { 303 + if (l % AX25_ADDR_LEN) 304 + return -1; 305 fac_national_digis_received = 1; 306 facilities->source_ndigis = 0; 307 facilities->dest_ndigis = 0; 308 for (pt = p + 2, lg = 0 ; lg < l ; pt += AX25_ADDR_LEN, lg += AX25_ADDR_LEN) { 309 + if (pt[6] & AX25_HBIT) { 310 + if (facilities->dest_ndigis >= ROSE_MAX_DIGIS) 311 + return -1; 312 memcpy(&facilities->dest_digis[facilities->dest_ndigis++], pt, AX25_ADDR_LEN); 313 + } else { 314 + if (facilities->source_ndigis >= ROSE_MAX_DIGIS) 315 + return -1; 316 memcpy(&facilities->source_digis[facilities->source_ndigis++], pt, AX25_ADDR_LEN); 317 + } 318 } 319 } 320 p += l + 2; ··· 314 do { 315 switch (*p & 0xC0) { 316 case 0x00: 317 + if (len < 2) 318 + return -1; 319 p += 2; 320 n += 2; 321 len -= 2; 322 break; 323 324 case 0x40: 325 + if (len < 3) 326 + return -1; 327 p += 3; 328 n += 3; 329 len -= 3; 330 break; 331 332 case 0x80: 333 + if (len < 4) 334 + return -1; 335 p += 4; 336 n += 4; 337 len -= 4; 338 break; 339 340 case 0xC0: 341 + if (len < 2) 342 + return -1; 343 l = p[1]; 344 + 345 + /* Prevent overflows*/ 346 + if (l < 10 || l > 20) 347 + return -1; 348 + 349 if (*p == FAC_CCITT_DEST_NSAP) { 350 memcpy(&facilities->source_addr, p + 7, ROSE_ADDR_LEN); 351 memcpy(callsign, p + 12, l - 10); ··· 355 return n; 356 } 357 358 + int rose_parse_facilities(unsigned char *p, unsigned packet_len, 359 struct rose_facilities_struct *facilities) 360 { 361 int facilities_len, len; 362 363 facilities_len = *p++; 364 365 + if (facilities_len == 0 || (unsigned)facilities_len > packet_len) 366 return 0; 367 368 + while (facilities_len >= 3 && *p == 0x00) { 369 + facilities_len--; 370 + p++; 371 372 + switch (*p) { 373 + case FAC_NATIONAL: /* National */ 374 + len = rose_parse_national(p + 1, facilities, facilities_len - 1); 375 + break; 376 377 + case FAC_CCITT: /* CCITT */ 378 + len = rose_parse_ccitt(p + 1, facilities, facilities_len - 1); 379 + break; 380 381 + default: 382 + printk(KERN_DEBUG "ROSE: rose_parse_facilities - unknown facilities family %02X\n", *p); 383 + len = 1; 384 + break; 385 + } 386 + 387 + if (len < 0) 388 + return 0; 389 + if (WARN_ON(len >= facilities_len)) 390 + return 0; 391 + facilities_len -= len + 1; 392 + p += len + 1; 393 } 394 395 + return facilities_len == 0; 396 } 397 398 static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
+3 -1
net/xfrm/xfrm_input.c
··· 173 goto drop_unlock; 174 } 175 176 - if (x->props.replay_window && x->repl->check(x, skb, seq)) { 177 XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATESEQERROR); 178 goto drop_unlock; 179 } ··· 189 190 XFRM_SKB_CB(skb)->seq.input.low = seq; 191 XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; 192 193 nexthdr = x->type->input(x, skb); 194
··· 173 goto drop_unlock; 174 } 175 176 + if (x->repl->check(x, skb, seq)) { 177 XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATESEQERROR); 178 goto drop_unlock; 179 } ··· 189 190 XFRM_SKB_CB(skb)->seq.input.low = seq; 191 XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; 192 + 193 + skb_dst_force(skb); 194 195 nexthdr = x->type->input(x, skb); 196
+3 -1
net/xfrm/xfrm_output.c
··· 78 79 spin_unlock_bh(&x->lock); 80 81 err = x->type->output(x, skb); 82 if (err == -EINPROGRESS) 83 goto out_exit; ··· 96 err = -EHOSTUNREACH; 97 goto error_nolock; 98 } 99 - skb_dst_set(skb, dst_clone(dst)); 100 x = dst->xfrm; 101 } while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL)); 102
··· 78 79 spin_unlock_bh(&x->lock); 80 81 + skb_dst_force(skb); 82 + 83 err = x->type->output(x, skb); 84 if (err == -EINPROGRESS) 85 goto out_exit; ··· 94 err = -EHOSTUNREACH; 95 goto error_nolock; 96 } 97 + skb_dst_set(skb, dst); 98 x = dst->xfrm; 99 } while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL)); 100
+15 -2
net/xfrm/xfrm_replay.c
··· 118 u32 diff; 119 u32 seq = ntohl(net_seq); 120 121 if (unlikely(seq == 0)) 122 goto err; 123 ··· 196 { 197 unsigned int bitnr, nr; 198 struct xfrm_replay_state_esn *replay_esn = x->replay_esn; 199 u32 seq = ntohl(net_seq); 200 u32 diff = replay_esn->seq - seq; 201 - u32 pos = (replay_esn->seq - 1) % replay_esn->replay_window; 202 203 if (unlikely(seq == 0)) 204 goto err; ··· 381 unsigned int bitnr, nr; 382 u32 diff; 383 struct xfrm_replay_state_esn *replay_esn = x->replay_esn; 384 u32 seq = ntohl(net_seq); 385 - u32 pos = (replay_esn->seq - 1) % replay_esn->replay_window; 386 u32 wsize = replay_esn->replay_window; 387 u32 top = replay_esn->seq; 388 u32 bottom = top - wsize + 1; 389 390 if (unlikely(seq == 0 && replay_esn->seq_hi == 0 && 391 (replay_esn->seq < replay_esn->replay_window - 1)))
··· 118 u32 diff; 119 u32 seq = ntohl(net_seq); 120 121 + if (!x->props.replay_window) 122 + return 0; 123 + 124 if (unlikely(seq == 0)) 125 goto err; 126 ··· 193 { 194 unsigned int bitnr, nr; 195 struct xfrm_replay_state_esn *replay_esn = x->replay_esn; 196 + u32 pos; 197 u32 seq = ntohl(net_seq); 198 u32 diff = replay_esn->seq - seq; 199 + 200 + if (!replay_esn->replay_window) 201 + return 0; 202 + 203 + pos = (replay_esn->seq - 1) % replay_esn->replay_window; 204 205 if (unlikely(seq == 0)) 206 goto err; ··· 373 unsigned int bitnr, nr; 374 u32 diff; 375 struct xfrm_replay_state_esn *replay_esn = x->replay_esn; 376 + u32 pos; 377 u32 seq = ntohl(net_seq); 378 u32 wsize = replay_esn->replay_window; 379 u32 top = replay_esn->seq; 380 u32 bottom = top - wsize + 1; 381 + 382 + if (!wsize) 383 + return 0; 384 + 385 + pos = (replay_esn->seq - 1) % replay_esn->replay_window; 386 387 if (unlikely(seq == 0 && replay_esn->seq_hi == 0 && 388 (replay_esn->seq < replay_esn->replay_window - 1)))
+6
net/xfrm/xfrm_state.c
··· 1181 goto error; 1182 } 1183 1184 memcpy(&x->mark, &orig->mark, sizeof(x->mark)); 1185 1186 err = xfrm_init_state(x);
··· 1181 goto error; 1182 } 1183 1184 + if (orig->replay_esn) { 1185 + err = xfrm_replay_clone(x, orig); 1186 + if (err) 1187 + goto error; 1188 + } 1189 + 1190 memcpy(&x->mark, &orig->mark, sizeof(x->mark)); 1191 1192 err = xfrm_init_state(x);
+24
net/xfrm/xfrm_user.c
··· 127 if (!rt) 128 return 0; 129 130 if (p->replay_window != 0) 131 return -EINVAL; 132 ··· 360 361 strcpy(p->alg_name, algo->name); 362 *algpp = p; 363 return 0; 364 } 365 ··· 1784 return -ESRCH; 1785 1786 if (x->km.state != XFRM_STATE_VALID) 1787 goto out; 1788 1789 spin_lock_bh(&x->lock);
··· 127 if (!rt) 128 return 0; 129 130 + if (p->id.proto != IPPROTO_ESP) 131 + return -EINVAL; 132 + 133 if (p->replay_window != 0) 134 return -EINVAL; 135 ··· 357 358 strcpy(p->alg_name, algo->name); 359 *algpp = p; 360 + return 0; 361 + } 362 + 363 + static inline int xfrm_replay_verify_len(struct xfrm_replay_state_esn *replay_esn, 364 + struct nlattr *rp) 365 + { 366 + struct xfrm_replay_state_esn *up; 367 + 368 + if (!replay_esn || !rp) 369 + return 0; 370 + 371 + up = nla_data(rp); 372 + 373 + if (xfrm_replay_state_esn_len(replay_esn) != 374 + xfrm_replay_state_esn_len(up)) 375 + return -EINVAL; 376 + 377 return 0; 378 } 379 ··· 1764 return -ESRCH; 1765 1766 if (x->km.state != XFRM_STATE_VALID) 1767 + goto out; 1768 + 1769 + err = xfrm_replay_verify_len(x->replay_esn, rp); 1770 + if (err) 1771 goto out; 1772 1773 spin_lock_bh(&x->lock);