Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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:
ipv4/route.c: respect prefsrc for local routes
bridge: stp: ensure mac header is set
bridge: fix br_multicast_ipv6_rcv for paged skbs
atl1: fix oops when changing tx/rx ring params
drivers/atm/atmtcp.c: add missing atm_dev_put
starfire: Fix dma_addr_t size test for MIPS
tg3: fix return value check in tg3_read_vpd()
Broadcom CNIC core network driver: fix mem leak on allocation failures in cnic_alloc_uio_rings()
ISDN, Gigaset: Fix memory leak in do_disconnect_req()
CAN: Use inode instead of kernel address for /proc file
skfp: testing the wrong variable in skfp_driver_init()
ppp: allow disabling multilink protocol ID compression
ehea: Avoid changing vlan flags
ueagle-atm: fix PHY signal initialization race

+87 -25
+4 -1
drivers/atm/atmtcp.c
··· 392 392 atm_dev_put(dev); 393 393 return -EMEDIUMTYPE; 394 394 } 395 - if (PRIV(dev)->vcc) return -EBUSY; 395 + if (PRIV(dev)->vcc) { 396 + atm_dev_put(dev); 397 + return -EBUSY; 398 + } 396 399 } 397 400 else { 398 401 int error;
+1
drivers/isdn/gigaset/capi.c
··· 1900 1900 if (b3skb == NULL) { 1901 1901 dev_err(cs->dev, "%s: out of memory\n", __func__); 1902 1902 send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR); 1903 + kfree(b3cmsg); 1903 1904 return; 1904 1905 } 1905 1906 capi_cmsg2message(b3cmsg,
+10
drivers/net/atlx/atl1.c
··· 3504 3504 struct atl1_rfd_ring rfd_old, rfd_new; 3505 3505 struct atl1_rrd_ring rrd_old, rrd_new; 3506 3506 struct atl1_ring_header rhdr_old, rhdr_new; 3507 + struct atl1_smb smb; 3508 + struct atl1_cmb cmb; 3507 3509 int err; 3508 3510 3509 3511 tpd_old = adapter->tpd_ring; ··· 3546 3544 adapter->rrd_ring = rrd_old; 3547 3545 adapter->tpd_ring = tpd_old; 3548 3546 adapter->ring_header = rhdr_old; 3547 + /* 3548 + * Save SMB and CMB, since atl1_free_ring_resources 3549 + * will clear them. 3550 + */ 3551 + smb = adapter->smb; 3552 + cmb = adapter->cmb; 3549 3553 atl1_free_ring_resources(adapter); 3550 3554 adapter->rfd_ring = rfd_new; 3551 3555 adapter->rrd_ring = rrd_new; 3552 3556 adapter->tpd_ring = tpd_new; 3553 3557 adapter->ring_header = rhdr_new; 3558 + adapter->smb = smb; 3559 + adapter->cmb = cmb; 3554 3560 3555 3561 err = atl1_up(adapter); 3556 3562 if (err)
+8 -2
drivers/net/cnic.c
··· 940 940 &udev->l2_ring_map, 941 941 GFP_KERNEL | __GFP_COMP); 942 942 if (!udev->l2_ring) 943 - return -ENOMEM; 943 + goto err_udev; 944 944 945 945 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; 946 946 udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size); ··· 948 948 &udev->l2_buf_map, 949 949 GFP_KERNEL | __GFP_COMP); 950 950 if (!udev->l2_buf) 951 - return -ENOMEM; 951 + goto err_dma; 952 952 953 953 write_lock(&cnic_dev_lock); 954 954 list_add(&udev->list, &cnic_udev_list); ··· 959 959 cp->udev = udev; 960 960 961 961 return 0; 962 + err_dma: 963 + dma_free_coherent(&udev->pdev->dev, udev->l2_ring_size, 964 + udev->l2_ring, udev->l2_ring_map); 965 + err_udev: 966 + kfree(udev); 967 + return -ENOMEM; 962 968 } 963 969 964 970 static int cnic_init_uio(struct cnic_dev *dev)
+7
drivers/net/ehea/ehea_ethtool.c
··· 263 263 264 264 static int ehea_set_flags(struct net_device *dev, u32 data) 265 265 { 266 + /* Avoid changing the VLAN flags */ 267 + if ((data & (ETH_FLAG_RXVLAN | ETH_FLAG_TXVLAN)) != 268 + (ethtool_op_get_flags(dev) & (ETH_FLAG_RXVLAN | 269 + ETH_FLAG_TXVLAN))){ 270 + return -EINVAL; 271 + } 272 + 266 273 return ethtool_op_set_flags(dev, data, ETH_FLAG_LRO 267 274 | ETH_FLAG_TXVLAN 268 275 | ETH_FLAG_RXVLAN);
+7 -2
drivers/net/ppp_generic.c
··· 1285 1285 } 1286 1286 1287 1287 #ifdef CONFIG_PPP_MULTILINK 1288 + static bool mp_protocol_compress __read_mostly = true; 1289 + module_param(mp_protocol_compress, bool, S_IRUGO | S_IWUSR); 1290 + MODULE_PARM_DESC(mp_protocol_compress, 1291 + "compress protocol id in multilink fragments"); 1292 + 1288 1293 /* 1289 1294 * Divide a packet to be transmitted into fragments and 1290 1295 * send them out the individual links. ··· 1352 1347 if (nfree == 0 || nfree < navail / 2) 1353 1348 return 0; /* can't take now, leave it in xmit_pending */ 1354 1349 1355 - /* Do protocol field compression (XXX this should be optional) */ 1350 + /* Do protocol field compression */ 1356 1351 p = skb->data; 1357 1352 len = skb->len; 1358 - if (*p == 0) { 1353 + if (*p == 0 && mp_protocol_compress) { 1359 1354 ++p; 1360 1355 --len; 1361 1356 }
+1 -1
drivers/net/skfp/skfddi.c
··· 412 412 bp->SharedMemAddr = pci_alloc_consistent(&bp->pdev, 413 413 bp->SharedMemSize, 414 414 &bp->SharedMemDMA); 415 - if (!bp->SharedMemSize) { 415 + if (!bp->SharedMemAddr) { 416 416 printk("could not allocate mem for "); 417 417 printk("hardware module: %ld byte\n", 418 418 bp->SharedMemSize);
+1 -1
drivers/net/starfire.c
··· 148 148 * This SUCKS. 149 149 * We need a much better method to determine if dma_addr_t is 64-bit. 150 150 */ 151 - #if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT)) 151 + #if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || (defined(CONFIG_MIPS) && ((defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || defined(CONFIG_64BIT))) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT)) 152 152 /* 64-bit dma_addr_t */ 153 153 #define ADDR_64BITS /* This chip uses 64 bit addresses. */ 154 154 #define netdrv_addr_t __le64
+1 -1
drivers/net/tg3.c
··· 12658 12658 cnt = pci_read_vpd(tp->pdev, pos, 12659 12659 TG3_NVM_VPD_LEN - pos, 12660 12660 &vpd_data[pos]); 12661 - if (cnt == -ETIMEDOUT || -EINTR) 12661 + if (cnt == -ETIMEDOUT || cnt == -EINTR) 12662 12662 cnt = 0; 12663 12663 else if (cnt < 0) 12664 12664 goto out_not_found;
+19 -3
drivers/usb/atm/ueagle-atm.c
··· 2206 2206 goto err1; 2207 2207 } 2208 2208 2209 - sc->kthread = kthread_run(uea_kthread, sc, "ueagle-atm"); 2210 - if (sc->kthread == ERR_PTR(-ENOMEM)) { 2209 + /* Create worker thread, but don't start it here. Start it after 2210 + * all usbatm generic initialization is done. 2211 + */ 2212 + sc->kthread = kthread_create(uea_kthread, sc, "ueagle-atm"); 2213 + if (IS_ERR(sc->kthread)) { 2211 2214 uea_err(INS_TO_USBDEV(sc), "failed to create thread\n"); 2212 2215 goto err2; 2213 2216 } ··· 2627 2624 static int uea_probe(struct usb_interface *intf, const struct usb_device_id *id) 2628 2625 { 2629 2626 struct usb_device *usb = interface_to_usbdev(intf); 2627 + int ret; 2630 2628 2631 2629 uea_enters(usb); 2632 2630 uea_info(usb, "ADSL device founded vid (%#X) pid (%#X) Rev (%#X): %s\n", ··· 2641 2637 if (UEA_IS_PREFIRM(id)) 2642 2638 return uea_load_firmware(usb, UEA_CHIP_VERSION(id)); 2643 2639 2644 - return usbatm_usb_probe(intf, id, &uea_usbatm_driver); 2640 + ret = usbatm_usb_probe(intf, id, &uea_usbatm_driver); 2641 + if (ret == 0) { 2642 + struct usbatm_data *usbatm = usb_get_intfdata(intf); 2643 + struct uea_softc *sc = usbatm->driver_data; 2644 + 2645 + /* Ensure carrier is initialized to off as early as possible */ 2646 + UPDATE_ATM_SIGNAL(ATM_PHY_SIG_LOST); 2647 + 2648 + /* Only start the worker thread when all init is done */ 2649 + wake_up_process(sc->kthread); 2650 + } 2651 + 2652 + return ret; 2645 2653 } 2646 2654 2647 2655 static void uea_disconnect(struct usb_interface *intf)
+18 -10
net/bridge/br_multicast.c
··· 1430 1430 struct net_bridge_port *port, 1431 1431 struct sk_buff *skb) 1432 1432 { 1433 - struct sk_buff *skb2 = skb; 1433 + struct sk_buff *skb2; 1434 1434 struct ipv6hdr *ip6h; 1435 1435 struct icmp6hdr *icmp6h; 1436 1436 u8 nexthdr; ··· 1469 1469 if (!skb2) 1470 1470 return -ENOMEM; 1471 1471 1472 + err = -EINVAL; 1473 + if (!pskb_may_pull(skb2, offset + sizeof(struct icmp6hdr))) 1474 + goto out; 1475 + 1472 1476 len -= offset - skb_network_offset(skb2); 1473 1477 1474 1478 __skb_pull(skb2, offset); 1475 1479 skb_reset_transport_header(skb2); 1476 - 1477 - err = -EINVAL; 1478 - if (!pskb_may_pull(skb2, sizeof(*icmp6h))) 1479 - goto out; 1480 1480 1481 1481 icmp6h = icmp6_hdr(skb2); 1482 1482 ··· 1516 1516 switch (icmp6h->icmp6_type) { 1517 1517 case ICMPV6_MGM_REPORT: 1518 1518 { 1519 - struct mld_msg *mld = (struct mld_msg *)icmp6h; 1519 + struct mld_msg *mld; 1520 + if (!pskb_may_pull(skb2, sizeof(*mld))) { 1521 + err = -EINVAL; 1522 + goto out; 1523 + } 1524 + mld = (struct mld_msg *)skb_transport_header(skb2); 1520 1525 BR_INPUT_SKB_CB(skb2)->mrouters_only = 1; 1521 1526 err = br_ip6_multicast_add_group(br, port, &mld->mld_mca); 1522 1527 break; ··· 1534 1529 break; 1535 1530 case ICMPV6_MGM_REDUCTION: 1536 1531 { 1537 - struct mld_msg *mld = (struct mld_msg *)icmp6h; 1532 + struct mld_msg *mld; 1533 + if (!pskb_may_pull(skb2, sizeof(*mld))) { 1534 + err = -EINVAL; 1535 + goto out; 1536 + } 1537 + mld = (struct mld_msg *)skb_transport_header(skb2); 1538 1538 br_ip6_multicast_leave_group(br, port, &mld->mld_mca); 1539 1539 } 1540 1540 } 1541 1541 1542 1542 out: 1543 - __skb_push(skb2, offset); 1544 - if (skb2 != skb) 1545 - kfree_skb(skb2); 1543 + kfree_skb(skb2); 1546 1544 return err; 1547 1545 } 1548 1546 #endif
+2
net/bridge/br_stp_bpdu.c
··· 50 50 51 51 llc_mac_hdr_init(skb, p->dev->dev_addr, p->br->group_addr); 52 52 53 + skb_reset_mac_header(skb); 54 + 53 55 NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev, 54 56 dev_queue_xmit); 55 57 }
+2 -2
net/can/bcm.c
··· 125 125 struct list_head tx_ops; 126 126 unsigned long dropped_usr_msgs; 127 127 struct proc_dir_entry *bcm_proc_read; 128 - char procname [20]; /* pointer printed in ASCII with \0 */ 128 + char procname [32]; /* inode number in decimal with \0 */ 129 129 }; 130 130 131 131 static inline struct bcm_sock *bcm_sk(const struct sock *sk) ··· 1521 1521 1522 1522 if (proc_dir) { 1523 1523 /* unique socket address as filename */ 1524 - sprintf(bo->procname, "%p", sock); 1524 + sprintf(bo->procname, "%lu", sock_i_ino(sk)); 1525 1525 bo->bcm_proc_read = proc_create_data(bo->procname, 0644, 1526 1526 proc_dir, 1527 1527 &bcm_proc_fops, sk);
+6 -2
net/ipv4/route.c
··· 2649 2649 } 2650 2650 2651 2651 if (res.type == RTN_LOCAL) { 2652 - if (!fl.fl4_src) 2653 - fl.fl4_src = fl.fl4_dst; 2652 + if (!fl.fl4_src) { 2653 + if (res.fi->fib_prefsrc) 2654 + fl.fl4_src = res.fi->fib_prefsrc; 2655 + else 2656 + fl.fl4_src = fl.fl4_dst; 2657 + } 2654 2658 dev_out = net->loopback_dev; 2655 2659 fl.oif = dev_out->ifindex; 2656 2660 res.fi = NULL;