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:
isdn: mISDN: socket: fix information leak to userland
netdev: can: Change mail address of Hans J. Koch
pcnet_cs: add new_id
net: Truncate recvfrom and sendto length to INT_MAX.
RDS: Let rds_message_alloc_sgs() return NULL
RDS: Copy rds_iovecs into kernel memory instead of rereading from userspace
RDS: Clean up error handling in rds_cmsg_rdma_args
RDS: Return -EINVAL if rds_rdma_pages returns an error
net: fix rds_iovec page count overflow
can: pch_can: fix section mismatch warning by using a whitelisted name
can: pch_can: fix sparse warning
netxen_nic: Fix the tx queue manipulation bug in netxen_nic_probe
ip_gre: fix fallback tunnel setup
vmxnet: trivial annotation of protocol constant
vmxnet3: remove unnecessary byteswapping in BAR writing macros
ipv6/udp: report SndbufErrors and RcvbufErrors
phy/marvell: rename 88ec048 to 88e1318s and fix mscr1 addr

+128 -67
+2
drivers/isdn/mISDN/socket.c
··· 392 392 if (dev) { 393 393 struct mISDN_devinfo di; 394 394 395 + memset(&di, 0, sizeof(di)); 395 396 di.id = dev->id; 396 397 di.Dprotocols = dev->Dprotocols; 397 398 di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); ··· 673 672 if (dev) { 674 673 struct mISDN_devinfo di; 675 674 675 + memset(&di, 0, sizeof(di)); 676 676 di.id = dev->id; 677 677 di.Dprotocols = dev->Dprotocols; 678 678 di.Bprotocols = dev->Bprotocols | get_all_Bprotocols();
+1 -1
drivers/net/can/at91_can.c
··· 1 1 /* 2 2 * at91_can.c - CAN network driver for AT91 SoC CAN controller 3 3 * 4 - * (C) 2007 by Hans J. Koch <hjk@linutronix.de> 4 + * (C) 2007 by Hans J. Koch <hjk@hansjkoch.de> 5 5 * (C) 2008, 2009, 2010 by Marc Kleine-Budde <kernel@pengutronix.de> 6 6 * 7 7 * This software may be distributed under the terms of the GNU General
+5 -5
drivers/net/can/pch_can.c
··· 213 213 }; 214 214 MODULE_DEVICE_TABLE(pci, pch_pci_tbl); 215 215 216 - static inline void pch_can_bit_set(u32 *addr, u32 mask) 216 + static inline void pch_can_bit_set(void __iomem *addr, u32 mask) 217 217 { 218 218 iowrite32(ioread32(addr) | mask, addr); 219 219 } 220 220 221 - static inline void pch_can_bit_clear(u32 *addr, u32 mask) 221 + static inline void pch_can_bit_clear(void __iomem *addr, u32 mask) 222 222 { 223 223 iowrite32(ioread32(addr) & ~mask, addr); 224 224 } ··· 1437 1437 return rc; 1438 1438 } 1439 1439 1440 - static struct pci_driver pch_can_pcidev = { 1440 + static struct pci_driver pch_can_pci_driver = { 1441 1441 .name = "pch_can", 1442 1442 .id_table = pch_pci_tbl, 1443 1443 .probe = pch_can_probe, ··· 1448 1448 1449 1449 static int __init pch_can_pci_init(void) 1450 1450 { 1451 - return pci_register_driver(&pch_can_pcidev); 1451 + return pci_register_driver(&pch_can_pci_driver); 1452 1452 } 1453 1453 module_init(pch_can_pci_init); 1454 1454 1455 1455 static void __exit pch_can_pci_exit(void) 1456 1456 { 1457 - pci_unregister_driver(&pch_can_pcidev); 1457 + pci_unregister_driver(&pch_can_pci_driver); 1458 1458 } 1459 1459 module_exit(pch_can_pci_exit); 1460 1460
-1
drivers/net/netxen/netxen_nic_main.c
··· 1240 1240 dev_warn(&pdev->dev, "failed to read mac addr\n"); 1241 1241 1242 1242 netif_carrier_off(netdev); 1243 - netif_stop_queue(netdev); 1244 1243 1245 1244 err = register_netdev(netdev); 1246 1245 if (err) {
+1
drivers/net/pcmcia/pcnet_cs.c
··· 1536 1536 PCMCIA_DEVICE_PROD_ID12("COMPU-SHACK", "FASTline PCMCIA 10/100 Fast-Ethernet", 0xfa2e424d, 0x3953d9b9), 1537 1537 PCMCIA_DEVICE_PROD_ID12("CONTEC", "C-NET(PC)C-10L", 0x21cab552, 0xf6f90722), 1538 1538 PCMCIA_DEVICE_PROD_ID12("corega", "FEther PCC-TXF", 0x0a21501a, 0xa51564a2), 1539 + PCMCIA_DEVICE_PROD_ID12("corega", "Ether CF-TD", 0x0a21501a, 0x6589340a), 1539 1540 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-T", 0x5261440f, 0xfa9d85bd), 1540 1541 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-TD", 0x5261440f, 0xc49bd73d), 1541 1542 PCMCIA_DEVICE_PROD_ID12("Corega K.K.", "corega EtherII PCC-TD", 0xd4fdcbd8, 0xc49bd73d),
+9 -9
drivers/net/phy/marvell.c
··· 74 74 #define MII_88E1121_PHY_MSCR_TX_DELAY BIT(4) 75 75 #define MII_88E1121_PHY_MSCR_DELAY_MASK (~(0x3 << 4)) 76 76 77 - #define MII_88EC048_PHY_MSCR1_REG 16 78 - #define MII_88EC048_PHY_MSCR1_PAD_ODD BIT(6) 77 + #define MII_88E1318S_PHY_MSCR1_REG 16 78 + #define MII_88E1318S_PHY_MSCR1_PAD_ODD BIT(6) 79 79 80 80 #define MII_88E1121_PHY_LED_CTRL 16 81 81 #define MII_88E1121_PHY_LED_PAGE 3 ··· 240 240 return err; 241 241 } 242 242 243 - static int m88ec048_config_aneg(struct phy_device *phydev) 243 + static int m88e1318_config_aneg(struct phy_device *phydev) 244 244 { 245 245 int err, oldpage, mscr; 246 246 ··· 251 251 if (err < 0) 252 252 return err; 253 253 254 - mscr = phy_read(phydev, MII_88EC048_PHY_MSCR1_REG); 255 - mscr |= MII_88EC048_PHY_MSCR1_PAD_ODD; 254 + mscr = phy_read(phydev, MII_88E1318S_PHY_MSCR1_REG); 255 + mscr |= MII_88E1318S_PHY_MSCR1_PAD_ODD; 256 256 257 - err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr); 257 + err = phy_write(phydev, MII_88E1318S_PHY_MSCR1_REG, mscr); 258 258 if (err < 0) 259 259 return err; 260 260 ··· 659 659 .driver = { .owner = THIS_MODULE }, 660 660 }, 661 661 { 662 - .phy_id = MARVELL_PHY_ID_88EC048, 662 + .phy_id = MARVELL_PHY_ID_88E1318S, 663 663 .phy_id_mask = MARVELL_PHY_ID_MASK, 664 - .name = "Marvell 88EC048", 664 + .name = "Marvell 88E1318S", 665 665 .features = PHY_GBIT_FEATURES, 666 666 .flags = PHY_HAS_INTERRUPT, 667 - .config_aneg = &m88ec048_config_aneg, 667 + .config_aneg = &m88e1318_config_aneg, 668 668 .read_status = &marvell_read_status, 669 669 .ack_interrupt = &marvell_ack_interrupt, 670 670 .config_intr = &marvell_config_intr,
+1 -1
drivers/net/vmxnet3/vmxnet3_drv.c
··· 873 873 count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 874 874 skb_shinfo(skb)->nr_frags + 1; 875 875 876 - ctx.ipv4 = (skb->protocol == __constant_ntohs(ETH_P_IP)); 876 + ctx.ipv4 = (skb->protocol == cpu_to_be16(ETH_P_IP)); 877 877 878 878 ctx.mss = skb_shinfo(skb)->gso_size; 879 879 if (ctx.mss) {
+4 -4
drivers/net/vmxnet3/vmxnet3_int.h
··· 330 330 }; 331 331 332 332 #define VMXNET3_WRITE_BAR0_REG(adapter, reg, val) \ 333 - writel(cpu_to_le32(val), (adapter)->hw_addr0 + (reg)) 333 + writel((val), (adapter)->hw_addr0 + (reg)) 334 334 #define VMXNET3_READ_BAR0_REG(adapter, reg) \ 335 - le32_to_cpu(readl((adapter)->hw_addr0 + (reg))) 335 + readl((adapter)->hw_addr0 + (reg)) 336 336 337 337 #define VMXNET3_WRITE_BAR1_REG(adapter, reg, val) \ 338 - writel(cpu_to_le32(val), (adapter)->hw_addr1 + (reg)) 338 + writel((val), (adapter)->hw_addr1 + (reg)) 339 339 #define VMXNET3_READ_BAR1_REG(adapter, reg) \ 340 - le32_to_cpu(readl((adapter)->hw_addr1 + (reg))) 340 + readl((adapter)->hw_addr1 + (reg)) 341 341 342 342 #define VMXNET3_WAKE_QUEUE_THRESHOLD(tq) (5) 343 343 #define VMXNET3_RX_ALLOC_THRESHOLD(rq, ring_idx, adapter) \
+1 -1
include/linux/marvell_phy.h
··· 12 12 #define MARVELL_PHY_ID_88E1121R 0x01410cb0 13 13 #define MARVELL_PHY_ID_88E1145 0x01410cd0 14 14 #define MARVELL_PHY_ID_88E1240 0x01410e30 15 - #define MARVELL_PHY_ID_88EC048 0x01410e90 15 + #define MARVELL_PHY_ID_88E1318S 0x01410e90 16 16 17 17 /* struct phy_device dev_flags definitions */ 18 18 #define MARVELL_PHY_M1145_FLAGS_RESISTANCE 0x00000001
+3 -3
net/ipv4/ip_gre.c
··· 1325 1325 { 1326 1326 struct ip_tunnel *tunnel = netdev_priv(dev); 1327 1327 struct iphdr *iph = &tunnel->parms.iph; 1328 - struct ipgre_net *ign = net_generic(dev_net(dev), ipgre_net_id); 1329 1328 1330 1329 tunnel->dev = dev; 1331 1330 strcpy(tunnel->parms.name, dev->name); ··· 1335 1336 tunnel->hlen = sizeof(struct iphdr) + 4; 1336 1337 1337 1338 dev_hold(dev); 1338 - rcu_assign_pointer(ign->tunnels_wc[0], tunnel); 1339 1339 } 1340 1340 1341 1341 ··· 1381 1383 if ((err = register_netdev(ign->fb_tunnel_dev))) 1382 1384 goto err_reg_dev; 1383 1385 1386 + rcu_assign_pointer(ign->tunnels_wc[0], 1387 + netdev_priv(ign->fb_tunnel_dev)); 1384 1388 return 0; 1385 1389 1386 1390 err_reg_dev: 1387 - free_netdev(ign->fb_tunnel_dev); 1391 + ipgre_dev_free(ign->fb_tunnel_dev); 1388 1392 err_alloc_dev: 1389 1393 return err; 1390 1394 }
+4
net/ipv6/proc.c
··· 126 126 SNMP_MIB_ITEM("Udp6NoPorts", UDP_MIB_NOPORTS), 127 127 SNMP_MIB_ITEM("Udp6InErrors", UDP_MIB_INERRORS), 128 128 SNMP_MIB_ITEM("Udp6OutDatagrams", UDP_MIB_OUTDATAGRAMS), 129 + SNMP_MIB_ITEM("Udp6RcvbufErrors", UDP_MIB_RCVBUFERRORS), 130 + SNMP_MIB_ITEM("Udp6SndbufErrors", UDP_MIB_SNDBUFERRORS), 129 131 SNMP_MIB_SENTINEL 130 132 }; 131 133 ··· 136 134 SNMP_MIB_ITEM("UdpLite6NoPorts", UDP_MIB_NOPORTS), 137 135 SNMP_MIB_ITEM("UdpLite6InErrors", UDP_MIB_INERRORS), 138 136 SNMP_MIB_ITEM("UdpLite6OutDatagrams", UDP_MIB_OUTDATAGRAMS), 137 + SNMP_MIB_ITEM("UdpLite6RcvbufErrors", UDP_MIB_RCVBUFERRORS), 138 + SNMP_MIB_ITEM("UdpLite6SndbufErrors", UDP_MIB_SNDBUFERRORS), 139 139 SNMP_MIB_SENTINEL 140 140 }; 141 141
+5
net/rds/message.c
··· 224 224 WARN_ON(rm->m_used_sgs + nents > rm->m_total_sgs); 225 225 WARN_ON(!nents); 226 226 227 + if (rm->m_used_sgs + nents > rm->m_total_sgs) 228 + return NULL; 229 + 227 230 sg_ret = &sg_first[rm->m_used_sgs]; 228 231 sg_init_table(sg_ret, nents); 229 232 rm->m_used_sgs += nents; ··· 249 246 rm->m_inc.i_hdr.h_len = cpu_to_be32(total_len); 250 247 rm->data.op_nents = ceil(total_len, PAGE_SIZE); 251 248 rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs); 249 + if (!rm->data.op_sg) 250 + return ERR_PTR(-ENOMEM); 252 251 253 252 for (i = 0; i < rm->data.op_nents; ++i) { 254 253 sg_set_page(&rm->data.op_sg[i],
+84 -42
net/rds/rdma.c
··· 479 479 480 480 481 481 /* 482 - * Count the number of pages needed to describe an incoming iovec. 482 + * Count the number of pages needed to describe an incoming iovec array. 483 483 */ 484 - static int rds_rdma_pages(struct rds_rdma_args *args) 484 + static int rds_rdma_pages(struct rds_iovec iov[], int nr_iovecs) 485 + { 486 + int tot_pages = 0; 487 + unsigned int nr_pages; 488 + unsigned int i; 489 + 490 + /* figure out the number of pages in the vector */ 491 + for (i = 0; i < nr_iovecs; i++) { 492 + nr_pages = rds_pages_in_vec(&iov[i]); 493 + if (nr_pages == 0) 494 + return -EINVAL; 495 + 496 + tot_pages += nr_pages; 497 + 498 + /* 499 + * nr_pages for one entry is limited to (UINT_MAX>>PAGE_SHIFT)+1, 500 + * so tot_pages cannot overflow without first going negative. 501 + */ 502 + if (tot_pages < 0) 503 + return -EINVAL; 504 + } 505 + 506 + return tot_pages; 507 + } 508 + 509 + int rds_rdma_extra_size(struct rds_rdma_args *args) 485 510 { 486 511 struct rds_iovec vec; 487 512 struct rds_iovec __user *local_vec; 488 - unsigned int tot_pages = 0; 513 + int tot_pages = 0; 489 514 unsigned int nr_pages; 490 515 unsigned int i; 491 516 ··· 527 502 return -EINVAL; 528 503 529 504 tot_pages += nr_pages; 505 + 506 + /* 507 + * nr_pages for one entry is limited to (UINT_MAX>>PAGE_SHIFT)+1, 508 + * so tot_pages cannot overflow without first going negative. 509 + */ 510 + if (tot_pages < 0) 511 + return -EINVAL; 530 512 } 531 513 532 - return tot_pages; 533 - } 534 - 535 - int rds_rdma_extra_size(struct rds_rdma_args *args) 536 - { 537 - return rds_rdma_pages(args) * sizeof(struct scatterlist); 514 + return tot_pages * sizeof(struct scatterlist); 538 515 } 539 516 540 517 /* ··· 547 520 struct cmsghdr *cmsg) 548 521 { 549 522 struct rds_rdma_args *args; 550 - struct rds_iovec vec; 551 523 struct rm_rdma_op *op = &rm->rdma; 552 524 int nr_pages; 553 525 unsigned int nr_bytes; 554 526 struct page **pages = NULL; 555 - struct rds_iovec __user *local_vec; 556 - unsigned int nr; 527 + struct rds_iovec iovstack[UIO_FASTIOV], *iovs = iovstack; 528 + int iov_size; 557 529 unsigned int i, j; 558 530 int ret = 0; 559 531 ··· 572 546 goto out; 573 547 } 574 548 575 - nr_pages = rds_rdma_pages(args); 576 - if (nr_pages < 0) 549 + /* Check whether to allocate the iovec area */ 550 + iov_size = args->nr_local * sizeof(struct rds_iovec); 551 + if (args->nr_local > UIO_FASTIOV) { 552 + iovs = sock_kmalloc(rds_rs_to_sk(rs), iov_size, GFP_KERNEL); 553 + if (!iovs) { 554 + ret = -ENOMEM; 555 + goto out; 556 + } 557 + } 558 + 559 + if (copy_from_user(iovs, (struct rds_iovec __user *)(unsigned long) args->local_vec_addr, iov_size)) { 560 + ret = -EFAULT; 577 561 goto out; 562 + } 563 + 564 + nr_pages = rds_rdma_pages(iovs, args->nr_local); 565 + if (nr_pages < 0) { 566 + ret = -EINVAL; 567 + goto out; 568 + } 578 569 579 570 pages = kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL); 580 571 if (!pages) { ··· 607 564 op->op_recverr = rs->rs_recverr; 608 565 WARN_ON(!nr_pages); 609 566 op->op_sg = rds_message_alloc_sgs(rm, nr_pages); 567 + if (!op->op_sg) { 568 + ret = -ENOMEM; 569 + goto out; 570 + } 610 571 611 572 if (op->op_notify || op->op_recverr) { 612 573 /* We allocate an uninitialized notifier here, because ··· 644 597 (unsigned long long)args->remote_vec.addr, 645 598 op->op_rkey); 646 599 647 - local_vec = (struct rds_iovec __user *)(unsigned long) args->local_vec_addr; 648 - 649 600 for (i = 0; i < args->nr_local; i++) { 650 - if (copy_from_user(&vec, &local_vec[i], 651 - sizeof(struct rds_iovec))) { 652 - ret = -EFAULT; 653 - goto out; 654 - } 601 + struct rds_iovec *iov = &iovs[i]; 602 + /* don't need to check, rds_rdma_pages() verified nr will be +nonzero */ 603 + unsigned int nr = rds_pages_in_vec(iov); 655 604 656 - nr = rds_pages_in_vec(&vec); 657 - if (nr == 0) { 658 - ret = -EINVAL; 659 - goto out; 660 - } 661 - 662 - rs->rs_user_addr = vec.addr; 663 - rs->rs_user_bytes = vec.bytes; 605 + rs->rs_user_addr = iov->addr; 606 + rs->rs_user_bytes = iov->bytes; 664 607 665 608 /* If it's a WRITE operation, we want to pin the pages for reading. 666 609 * If it's a READ operation, we need to pin the pages for writing. 667 610 */ 668 - ret = rds_pin_pages(vec.addr, nr, pages, !op->op_write); 611 + ret = rds_pin_pages(iov->addr, nr, pages, !op->op_write); 669 612 if (ret < 0) 670 613 goto out; 671 614 672 - rdsdebug("RDS: nr_bytes %u nr %u vec.bytes %llu vec.addr %llx\n", 673 - nr_bytes, nr, vec.bytes, vec.addr); 615 + rdsdebug("RDS: nr_bytes %u nr %u iov->bytes %llu iov->addr %llx\n", 616 + nr_bytes, nr, iov->bytes, iov->addr); 674 617 675 - nr_bytes += vec.bytes; 618 + nr_bytes += iov->bytes; 676 619 677 620 for (j = 0; j < nr; j++) { 678 - unsigned int offset = vec.addr & ~PAGE_MASK; 621 + unsigned int offset = iov->addr & ~PAGE_MASK; 679 622 struct scatterlist *sg; 680 623 681 624 sg = &op->op_sg[op->op_nents + j]; 682 625 sg_set_page(sg, pages[j], 683 - min_t(unsigned int, vec.bytes, PAGE_SIZE - offset), 626 + min_t(unsigned int, iov->bytes, PAGE_SIZE - offset), 684 627 offset); 685 628 686 - rdsdebug("RDS: sg->offset %x sg->len %x vec.addr %llx vec.bytes %llu\n", 687 - sg->offset, sg->length, vec.addr, vec.bytes); 629 + rdsdebug("RDS: sg->offset %x sg->len %x iov->addr %llx iov->bytes %llu\n", 630 + sg->offset, sg->length, iov->addr, iov->bytes); 688 631 689 - vec.addr += sg->length; 690 - vec.bytes -= sg->length; 632 + iov->addr += sg->length; 633 + iov->bytes -= sg->length; 691 634 } 692 635 693 636 op->op_nents += nr; ··· 692 655 } 693 656 op->op_bytes = nr_bytes; 694 657 695 - ret = 0; 696 658 out: 659 + if (iovs != iovstack) 660 + sock_kfree_s(rds_rs_to_sk(rs), iovs, iov_size); 697 661 kfree(pages); 698 662 if (ret) 699 663 rds_rdma_free_op(op); 700 - 701 - rds_stats_inc(s_send_rdma); 664 + else 665 + rds_stats_inc(s_send_rdma); 702 666 703 667 return ret; 704 668 } ··· 811 773 rm->atomic.op_active = 1; 812 774 rm->atomic.op_recverr = rs->rs_recverr; 813 775 rm->atomic.op_sg = rds_message_alloc_sgs(rm, 1); 776 + if (!rm->atomic.op_sg) { 777 + ret = -ENOMEM; 778 + goto err; 779 + } 814 780 815 781 /* verify 8 byte-aligned */ 816 782 if (args->local_addr & 0x7) {
+4
net/rds/send.c
··· 973 973 /* Attach data to the rm */ 974 974 if (payload_len) { 975 975 rm->data.op_sg = rds_message_alloc_sgs(rm, ceil(payload_len, PAGE_SIZE)); 976 + if (!rm->data.op_sg) { 977 + ret = -ENOMEM; 978 + goto out; 979 + } 976 980 ret = rds_message_copy_from_user(rm, msg->msg_iov, payload_len); 977 981 if (ret) 978 982 goto out;
+4
net/socket.c
··· 1652 1652 struct iovec iov; 1653 1653 int fput_needed; 1654 1654 1655 + if (len > INT_MAX) 1656 + len = INT_MAX; 1655 1657 sock = sockfd_lookup_light(fd, &err, &fput_needed); 1656 1658 if (!sock) 1657 1659 goto out; ··· 1711 1709 int err, err2; 1712 1710 int fput_needed; 1713 1711 1712 + if (size > INT_MAX) 1713 + size = INT_MAX; 1714 1714 sock = sockfd_lookup_light(fd, &err, &fput_needed); 1715 1715 if (!sock) 1716 1716 goto out;