# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet v2.6.1 -> 1.1510 # net/llc/af_llc.c 1.58 -> 1.59 # include/net/irda/timer.h 1.3 -> 1.4 # arch/sparc/kernel/irq.c 1.25 -> 1.26 # include/net/tcp.h 1.52 -> 1.53 # arch/sparc64/prom/bootstr.c 1.4 -> 1.5 # net/ipv4/af_inet.c 1.60 -> 1.61 # net/ipx/af_ipx.c 1.45 -> 1.46 # net/ipv4/udp.c 1.55 -> 1.56 # net/bluetooth/af_bluetooth.c 1.25 -> 1.26 # net/ipv4/netfilter/ip_tables.c 1.19 -> 1.20 # net/bluetooth/sco.c 1.22 -> 1.23 # net/irda/irlap_frame.c 1.14 -> 1.15 # net/key/af_key.c 1.49 -> 1.50 # net/ipv4/tcp.c 1.50 -> 1.51 # net/irda/ircomm/ircomm_tty.c 1.30 -> 1.31 # net/irda/af_irda.c 1.47 -> 1.49 # arch/sparc64/defconfig 1.108 -> 1.109 # arch/sparc/mm/fault.c 1.13 -> 1.14 # net/socket.c 1.70 -> 1.71 # arch/sparc64/kernel/head.S 1.20 -> 1.21 # net/ipv6/raw.c 1.44 -> 1.45 # net/atm/br2684.c 1.9 -> 1.10 # include/linux/net.h 1.17 -> 1.18 # include/linux/pci_ids.h 1.129 -> 1.130 # include/net/bluetooth/bluetooth.h 1.13 -> 1.14 # net/ipx/ipx_route.c 1.2 -> 1.3 # net/econet/af_econet.c 1.28 -> 1.29 # net/netrom/af_netrom.c 1.42 -> 1.43 # net/rose/af_rose.c 1.36 -> 1.37 # net/netlink/af_netlink.c 1.37 -> 1.38 # net/decnet/af_decnet.c 1.36 -> 1.37 # drivers/net/irda/sir-dev.h 1.1 -> 1.2 # net/ipv4/raw.c 1.42 -> 1.43 # net/bluetooth/hci_sock.c 1.26 -> 1.27 # arch/sparc/mm/srmmu.c 1.37 -> 1.38 # net/irda/irlap_event.c 1.23 -> 1.24 # drivers/net/irda/sir_dev.c 1.7 -> 1.9 # net/unix/af_unix.c 1.55 -> 1.56 # drivers/net/pppoe.c 1.38 -> 1.39 # net/bluetooth/rfcomm/sock.c 1.24 -> 1.25 # net/packet/af_packet.c 1.37 -> 1.38 # net/bluetooth/l2cap.c 1.34 -> 1.35 # include/net/sock.h 1.48 -> 1.49 # net/core/sock.c 1.30 -> 1.31 # include/net/inet_common.h 1.5 -> 1.6 # net/atm/common.h 1.13 -> 1.14 # include/net/udp.h 1.12 -> 1.13 # drivers/net/irda/sir_kthread.c 1.8 -> 1.9 # net/ipv6/udp.c 1.56 -> 1.57 # arch/sparc64/Kconfig 1.41 -> 1.42 # net/ax25/af_ax25.c 1.35 -> 1.36 # net/x25/af_x25.c 1.35 -> 1.36 # net/appletalk/ddp.c 1.40 -> 1.41 # net/sctp/socket.c 1.100 -> 1.101 # net/atm/common.c 1.48 -> 1.49 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 04/01/08 torvalds@home.osdl.org 1.1503 # Linux 2.6.1 # -------------------------------------------- # 04/01/09 davem@nuts.ninka.net 1.1504 # [SPARC64]: In early bootup, BUG() if cannot find TLB entry for remapping. # -------------------------------------------- # 04/01/09 wesolows@foobazco.org 1.1505 # [SPARC]: Fix PMD masking in SRMMU code. # -------------------------------------------- # 04/01/09 wesolows@foobazco.org 1.1506 # [SPARC]: Use spinlock to protect IRQ action management. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.1 # [NET]: Use size_t for size argument in {send,recv}msg callchain. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.2 # [IPV4/IPV6]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.3 # [BLUETOOTH]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.4 # [PPPOE]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.5 # [APPLETALK DDP]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.6 # [ATM]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.7 # [AX25]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.8 # [IPX]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.9 # [DECNET]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.10 # [NETLINK]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.11 # [ECONET]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.12 # [IRDA]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.13 # [LLC]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.14 # [NETROM]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.15 # [ROSE]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.16 # [UNIX]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.1.17 # [X25]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 chas@cmf.nrl.navy.mil 1.1503.1.18 # [ATM]: br2684 incorrectly handles frames recvd with FCS (by Alex Zeffertt ) # -------------------------------------------- # 04/01/09 garloff@suse.de 1.1503.1.19 # [NETFILTER]: Align nulldevname properly in ip_tables. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.1.20 # [IRDA]: Proper calculation for F-timer. Improve interoperability. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.1.21 # [IRDA]: Fix a potential dealock in sir-dev state machine. # # Also, make sir-dev locking compatible with irport. # From Martin Diehl. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.1.22 # [IRDA]: Fix sir-dev 'raw' mode for sir dongles that need it. # # From Martin Diehl. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.1.23 # [IRDA]: Add module alias for IrCOMM pseudo serial device. # # From Martin Diehl. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.1.24 # [IRDA]: Fix compiler warning in af_irda.c # -------------------------------------------- # 04/01/09 bcollins@debian.org 1.1507 # [SPARC64]: Add option to define default command line to kernel, ala PPC. # -------------------------------------------- # 04/01/09 davem@nuts.ninka.net 1.1508 # [SPARC64]: Update defconfig. # -------------------------------------------- # 04/01/09 torvalds@home.osdl.org 1.1509 # Merge bk://kernel.bkbits.net/davem/sparc-2.6 # into home.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # 04/01/09 davej@redhat.com 1.1484.1.2 # [AGPGART] The RadeonIGP 345M device ID is 0xcbb2, not 0xcbb # Spotted by Matteo Croce # -------------------------------------------- # 04/01/09 torvalds@home.osdl.org 1.1510 # Merge bk://linux-dj.bkbits.net/agpgart # into home.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # diff -Nru a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c --- a/arch/sparc/kernel/irq.c Mon Jan 12 20:25:28 2004 +++ b/arch/sparc/kernel/irq.c Mon Jan 12 20:25:28 2004 @@ -49,6 +49,9 @@ #include #include +/* Used to protect the IRQ action lists */ +spinlock_t irq_action_lock = SPIN_LOCK_UNLOCKED; + /* * Dave Redman (djhr@tadpole.co.uk) * @@ -492,7 +495,7 @@ return -EBUSY; } - save_and_cli(flags); + spin_lock_irqsave(&irq_action_lock, flags); /* If this is flagged as statically allocated then we use our * private struct which is never freed. @@ -507,10 +510,10 @@ if (action == NULL) action = (struct irqaction *)kmalloc(sizeof(struct irqaction), - GFP_KERNEL); + GFP_ATOMIC); if (!action) { - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return -ENOMEM; } @@ -547,7 +550,7 @@ *(cpu_irq + irq_action) = action; enable_irq(irq); - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return 0; } @@ -586,7 +589,7 @@ action = NULL; /* Or else! */ } - save_and_cli(flags); + spin_lock_irqsave(&irq_action_lock, flags); /* If this is flagged as statically allocated then we use our * private struct which is never freed. @@ -600,10 +603,10 @@ if (action == NULL) action = (struct irqaction *)kmalloc(sizeof(struct irqaction), - GFP_KERNEL); + GFP_ATOMIC); if (!action) { - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return -ENOMEM; } @@ -620,7 +623,7 @@ *(cpu_irq + irq_action) = action; enable_irq(irq); - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return 0; } diff -Nru a/arch/sparc/mm/fault.c b/arch/sparc/mm/fault.c --- a/arch/sparc/mm/fault.c Mon Jan 12 20:25:28 2004 +++ b/arch/sparc/mm/fault.c Mon Jan 12 20:25:28 2004 @@ -36,7 +36,6 @@ #define ELEMENTS(arr) (sizeof (arr)/sizeof (arr[0])) -extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS+1]; extern int prom_node_root; /* At boot time we determine these two values necessary for setting diff -Nru a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c --- a/arch/sparc/mm/srmmu.c Mon Jan 12 20:25:28 2004 +++ b/arch/sparc/mm/srmmu.c Mon Jan 12 20:25:28 2004 @@ -349,7 +349,7 @@ vaddr, (unsigned long)SRMMU_NOCACHE_VADDR); BUG(); } - if (vaddr+size >= srmmu_nocache_end) { + if (vaddr+size > srmmu_nocache_end) { printk("Vaddr %lx is bigger than nocache end 0x%lx\n", vaddr, srmmu_nocache_end); BUG(); @@ -1071,7 +1071,7 @@ } if (start > (0xffffffffUL - SRMMU_PMD_SIZE_SOFT)) break; - start = (start + SRMMU_PMD_SIZE) & SRMMU_PMD_MASK; + start = (start + SRMMU_PMD_SIZE_SOFT) & SRMMU_PMD_MASK_SOFT; } } @@ -1101,7 +1101,7 @@ } if (start > (0xffffffffUL - SRMMU_PMD_SIZE_SOFT)) break; - start = (start + SRMMU_PMD_SIZE) & SRMMU_PMD_MASK; + start = (start + SRMMU_PMD_SIZE_SOFT) & SRMMU_PMD_MASK_SOFT; } } diff -Nru a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig --- a/arch/sparc64/Kconfig Mon Jan 12 20:25:28 2004 +++ b/arch/sparc64/Kconfig Mon Jan 12 20:25:28 2004 @@ -489,6 +489,22 @@ machines. The watchdog timeout period is normally one minute but can be changed with a boot-time parameter. +config CMDLINE_BOOL + bool "Default bootloader kernel arguments" + +config CMDLINE + string "Initial kernel command string" + depends on CMDLINE_BOOL + default "console=ttyS0,9600 root=/dev/sda1" + help + Say Y here if you want to be able to pass default arguments to + the kernel. This will be overridden by the bootloader, if you + use one (such as SILO). This is most useful if you want to boot + a kernel from TFTP, and want default options to be available + with having them passed on the command line. + + NOTE: This option WILL override the PROM bootargs setting! + endmenu source "drivers/base/Kconfig" diff -Nru a/arch/sparc64/defconfig b/arch/sparc64/defconfig --- a/arch/sparc64/defconfig Mon Jan 12 20:25:28 2004 +++ b/arch/sparc64/defconfig Mon Jan 12 20:25:28 2004 @@ -102,6 +102,7 @@ CONFIG_DISPLAY7SEG=m CONFIG_WATCHDOG_CP1XXX=m CONFIG_WATCHDOG_RIO=m +# CONFIG_CMDLINE_BOOL is not set # # Generic Driver Options @@ -1286,6 +1287,7 @@ CONFIG_DVB_TWINHAN_DST=m CONFIG_DVB_STV0299=m CONFIG_DVB_SP887X=m +CONFIG_DVB_SP887X_FIRMWARE_FILE="/etc/dvb/sc_main.mc" CONFIG_DVB_ALPS_TDLB7=m CONFIG_DVB_ALPS_TDMB7=m CONFIG_DVB_ATMEL_AT76C651=m @@ -1295,12 +1297,12 @@ CONFIG_DVB_MT312=m CONFIG_DVB_VES1820=m CONFIG_DVB_VES1X93=m -CONFIG_DVB_SP887X_FIRMWARE_FILE="/etc/dvb/sc_main.mc" # # Supported SAA7146 based PCI Adapters # -# CONFIG_DVB_AV7110 is not set +CONFIG_DVB_AV7110=m +# CONFIG_DVB_AV7110_OSD is not set CONFIG_DVB_BUDGET=m CONFIG_DVB_BUDGET_CI=m CONFIG_DVB_BUDGET_AV=m diff -Nru a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S --- a/arch/sparc64/kernel/head.S Mon Jan 12 20:25:28 2004 +++ b/arch/sparc64/kernel/head.S Mon Jan 12 20:25:28 2004 @@ -151,6 +151,9 @@ blu,pt %xcc, 1b add %l0, (1 << 3), %l0 + /* BUG() if we get here... */ + ta 0x5 + cheetah_got_tlbentry: ldxa [%l0] ASI_ITLB_DATA_ACCESS, %g0 ldxa [%l0] ASI_ITLB_DATA_ACCESS, %g1 @@ -332,6 +335,9 @@ cmp %l0, (63 << 3) blu,pt %xcc, 1b add %l0, (1 << 3), %l0 + + /* BUG() if we get here... */ + ta 0x5 spitfire_got_tlbentry: /* Nops here again, perhaps Cheetah/Blackbird are better behaved... */ diff -Nru a/arch/sparc64/prom/bootstr.c b/arch/sparc64/prom/bootstr.c --- a/arch/sparc64/prom/bootstr.c Mon Jan 12 20:25:28 2004 +++ b/arch/sparc64/prom/bootstr.c Mon Jan 12 20:25:28 2004 @@ -21,6 +21,10 @@ char bootstr_buf[BARG_LEN]; } bootstr_info = { .bootstr_len = BARG_LEN, +#ifdef CONFIG_CMDLINE + .bootstr_valid = 1, + .bootstr_buf = CONFIG_CMDLINE, +#endif }; char * __init diff -Nru a/drivers/net/irda/sir-dev.h b/drivers/net/irda/sir-dev.h --- a/drivers/net/irda/sir-dev.h Mon Jan 12 20:25:28 2004 +++ b/drivers/net/irda/sir-dev.h Mon Jan 12 20:25:28 2004 @@ -179,6 +179,7 @@ struct sir_fsm fsm; atomic_t enable_rx; + int raw_tx; spinlock_t tx_lock; u32 new_speed; diff -Nru a/drivers/net/irda/sir_dev.c b/drivers/net/irda/sir_dev.c --- a/drivers/net/irda/sir_dev.c Mon Jan 12 20:25:28 2004 +++ b/drivers/net/irda/sir_dev.c Mon Jan 12 20:25:28 2004 @@ -31,7 +31,9 @@ /* flush rx-buffer - should also help in case of problems with echo cancelation */ dev->rx_buff.data = dev->rx_buff.head; - dev->tx_buff.len = 0; + dev->rx_buff.len = 0; + dev->rx_buff.in_frame = FALSE; + dev->rx_buff.state = OUTSIDE_FRAME; atomic_set(&dev->enable_rx, 1); } @@ -62,24 +64,34 @@ int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len) { + unsigned long flags; int ret; if (unlikely(len > dev->tx_buff.truesize)) return -ENOSPC; - spin_lock_bh(&dev->tx_lock); /* serialize with other tx operations */ - while (dev->tx_buff.len > 0) { /* wait until tx idle */ - spin_unlock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); /* serialize with other tx operations */ + while (dev->tx_buff.len > 0) { /* wait until tx idle */ + spin_unlock_irqrestore(&dev->tx_lock, flags); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(MSECS_TO_JIFFIES(10)); - spin_lock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); } dev->tx_buff.data = dev->tx_buff.head; memcpy(dev->tx_buff.data, buf, len); + dev->tx_buff.len = len; ret = dev->drv->do_write(dev, dev->tx_buff.data, dev->tx_buff.len); - spin_unlock_bh(&dev->tx_lock); + if (ret > 0) { + IRDA_DEBUG(3, "%s(), raw-tx started\n", __FUNCTION__); + + dev->tx_buff.data += ret; + dev->tx_buff.len -= ret; + dev->raw_tx = 1; + ret = len; /* all data is going to be sent */ + } + spin_unlock_irqrestore(&dev->tx_lock, flags); return ret; } @@ -94,13 +106,13 @@ count = (len < dev->rx_buff.len) ? len : dev->rx_buff.len; - if (count > 0) - memcpy(buf, dev->rx_buff.head, count); + if (count > 0) { + memcpy(buf, dev->rx_buff.data, count); + dev->rx_buff.data += count; + dev->rx_buff.len -= count; + } - /* forget trailing stuff */ - dev->rx_buff.data = dev->rx_buff.head; - dev->rx_buff.len = 0; - dev->rx_buff.state = OUTSIDE_FRAME; + /* remaining stuff gets flushed when re-enabling normal rx */ return count; } @@ -114,11 +126,12 @@ void sirdev_write_complete(struct sir_dev *dev) { + unsigned long flags; struct sk_buff *skb; int actual = 0; int err; - spin_lock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); IRDA_DEBUG(3, "%s() - dev->tx_buff.len = %d\n", __FUNCTION__, dev->tx_buff.len); @@ -143,11 +156,24 @@ dev->tx_buff.len = 0; } if (dev->tx_buff.len > 0) { - spin_unlock_bh(&dev->tx_lock); + spin_unlock_irqrestore(&dev->tx_lock, flags); return; } } + if (unlikely(dev->raw_tx != 0)) { + /* in raw mode we are just done now after the buffer was sent + * completely. Since this was requested by some dongle driver + * running under the control of the irda-thread we must take + * care here not to re-enable the queue. The queue will be + * restarted when the irda-thread has completed the request. + */ + + IRDA_DEBUG(3, "%s(), raw-tx done\n", __FUNCTION__); + dev->raw_tx = 0; + return; + } + /* we have finished now sending this skb. * update statistics and free the skb. * finally we check and trigger a pending speed change, if any. @@ -190,7 +216,7 @@ netif_wake_queue(dev->netdev); } - spin_unlock_bh(&dev->tx_lock); + spin_unlock_irqrestore(&dev->tx_lock, flags); } /* called from client driver - likely with bh-context - to give us @@ -258,6 +284,7 @@ static int sirdev_hard_xmit(struct sk_buff *skb, struct net_device *ndev) { struct sir_dev *dev = ndev->priv; + unsigned long flags; int actual = 0; int err; s32 speed; @@ -307,7 +334,7 @@ } /* serialize with write completion */ - spin_lock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); /* Copy skb to tx_buff while wrapping, stuffing and making CRC */ dev->tx_buff.len = async_wrap_skb(skb, dev->tx_buff.data, dev->tx_buff.truesize); @@ -337,7 +364,7 @@ dev->stats.tx_dropped++; netif_wake_queue(ndev); } - spin_unlock_bh(&dev->tx_lock); + spin_unlock_irqrestore(&dev->tx_lock, flags); return 0; } @@ -479,6 +506,7 @@ goto errout_free; sirdev_enable_rx(dev); + dev->raw_tx = 0; netif_start_queue(ndev); dev->irlap = irlap_open(ndev, &dev->qos, dev->hwname); diff -Nru a/drivers/net/irda/sir_kthread.c b/drivers/net/irda/sir_kthread.c --- a/drivers/net/irda/sir_kthread.c Mon Jan 12 20:25:28 2004 +++ b/drivers/net/irda/sir_kthread.c Mon Jan 12 20:25:28 2004 @@ -436,14 +436,13 @@ IRDA_DEBUG(2, "%s - state=0x%04x / param=%u\n", __FUNCTION__, initial_state, param); - if (in_interrupt()) { - if (down_trylock(&fsm->sem)) { + if (down_trylock(&fsm->sem)) { + if (in_interrupt() || in_atomic() || irqs_disabled()) { IRDA_DEBUG(1, "%s(), state machine busy!\n", __FUNCTION__); return -EWOULDBLOCK; - } + } else + down(&fsm->sem); } - else - down(&fsm->sem); if (fsm->state == SIRDEV_STATE_DEAD) { /* race with sirdev_close should never happen */ diff -Nru a/drivers/net/pppoe.c b/drivers/net/pppoe.c --- a/drivers/net/pppoe.c Mon Jan 12 20:25:28 2004 +++ b/drivers/net/pppoe.c Mon Jan 12 20:25:28 2004 @@ -775,8 +775,8 @@ } -static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, - int total_len) +static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *m, size_t total_len) { struct sk_buff *skb = NULL; struct sock *sk = sock->sk; @@ -939,7 +939,7 @@ }; static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *m, int total_len, int flags) + struct msghdr *m, size_t total_len, int flags) { struct sock *sk = sock->sk; struct sk_buff *skb = NULL; diff -Nru a/include/linux/net.h b/include/linux/net.h --- a/include/linux/net.h Mon Jan 12 20:25:28 2004 +++ b/include/linux/net.h Mon Jan 12 20:25:28 2004 @@ -120,9 +120,9 @@ int (*getsockopt)(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen); int (*sendmsg) (struct kiocb *iocb, struct socket *sock, - struct msghdr *m, int total_len); + struct msghdr *m, size_t total_len); int (*recvmsg) (struct kiocb *iocb, struct socket *sock, - struct msghdr *m, int total_len, + struct msghdr *m, size_t total_len, int flags); int (*mmap) (struct file *file, struct socket *sock, struct vm_area_struct * vma); @@ -151,13 +151,13 @@ struct socket **res); extern void sock_release(struct socket *sock); extern int sock_sendmsg(struct socket *sock, struct msghdr *msg, - int len); + size_t len); extern int sock_recvmsg(struct socket *sock, struct msghdr *msg, - int size, int flags); + size_t size, int flags); extern int sock_readv_writev(int type, struct inode *inode, struct file *file, const struct iovec *iov, long count, - long size); + size_t size); extern int sock_map_fd(struct socket *sock); extern struct socket *sockfd_lookup(int fd, int *err); #define sockfd_put(sock) fput(sock->file) @@ -216,9 +216,9 @@ char *optval, int optlen), (sock, level, optname, optval, optlen)) \ SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \ char *optval, int *optlen), (sock, level, optname, optval, optlen)) \ -SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, int len), \ +SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \ (iocb, sock, m, len)) \ -SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, int len, int flags), \ +SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \ (iocb, sock, m, len, flags)) \ SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \ (file, sock, vma)) \ diff -Nru a/include/linux/pci_ids.h b/include/linux/pci_ids.h --- a/include/linux/pci_ids.h Mon Jan 12 20:25:28 2004 +++ b/include/linux/pci_ids.h Mon Jan 12 20:25:28 2004 @@ -325,7 +325,7 @@ /* RadeonIGP */ #define PCI_DEVICE_ID_ATI_RS100 0xcab0 #define PCI_DEVICE_ID_ATI_RS200 0xcab2 -#define PCI_DEVICE_ID_ATI_RS200_B 0xcbb3 +#define PCI_DEVICE_ID_ATI_RS200_B 0xcbb2 #define PCI_DEVICE_ID_ATI_RS250 0xcab3 #define PCI_DEVICE_ID_ATI_RS300_100 0x5830 #define PCI_DEVICE_ID_ATI_RS300_133 0x5831 diff -Nru a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h --- a/include/net/bluetooth/bluetooth.h Mon Jan 12 20:25:28 2004 +++ b/include/net/bluetooth/bluetooth.h Mon Jan 12 20:25:28 2004 @@ -129,7 +129,7 @@ struct sock *bt_sock_alloc(struct socket *sock, int proto, int pi_size, int prio); void bt_sock_link(struct bt_sock_list *l, struct sock *s); void bt_sock_unlink(struct bt_sock_list *l, struct sock *s); -int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int len, int flags); +int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags); uint bt_sock_poll(struct file * file, struct socket *sock, poll_table *wait); int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo); diff -Nru a/include/net/inet_common.h b/include/net/inet_common.h --- a/include/net/inet_common.h Mon Jan 12 20:25:28 2004 +++ b/include/net/inet_common.h Mon Jan 12 20:25:28 2004 @@ -23,11 +23,11 @@ extern int inet_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *ubuf, - int size, int flags); + size_t size, int flags); extern int inet_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int size); + size_t size); extern int inet_shutdown(struct socket *sock, int how); extern unsigned int inet_poll(struct file * file, struct socket *sock, struct poll_table_struct *wait); extern int inet_setsockopt(struct socket *sock, int level, diff -Nru a/include/net/irda/timer.h b/include/net/irda/timer.h --- a/include/net/irda/timer.h Mon Jan 12 20:25:28 2004 +++ b/include/net/irda/timer.h Mon Jan 12 20:25:28 2004 @@ -40,14 +40,14 @@ struct lap_cb; /* - * Timeout definitions, some defined in IrLAP p. 92 + * Timeout definitions, some defined in IrLAP 6.13.5 - p. 92 */ #define POLL_TIMEOUT (450*HZ/1000) /* Must never exceed 500 ms */ #define FINAL_TIMEOUT (500*HZ/1000) /* Must never exceed 500 ms */ /* - * Normally twice of p-timer. Note 3, IrLAP p. 60 suggests at least twice - * duration of the P-timer. + * Normally twice of p-timer. Note 3, IrLAP 6.3.11.2 - p. 60 suggests + * at least twice duration of the P-timer. */ #define WD_TIMEOUT (POLL_TIMEOUT*2) diff -Nru a/include/net/sock.h b/include/net/sock.h --- a/include/net/sock.h Mon Jan 12 20:25:28 2004 +++ b/include/net/sock.h Mon Jan 12 20:25:28 2004 @@ -418,10 +418,10 @@ int optname, char *optval, int *option); int (*sendmsg)(struct kiocb *iocb, struct sock *sk, - struct msghdr *msg, int len); + struct msghdr *msg, size_t len); int (*recvmsg)(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len, int noblock, int flags, + size_t len, int noblock, int flags, int *addr_len); int (*sendpage)(struct sock *sk, struct page *page, int offset, size_t size, int flags); @@ -609,9 +609,9 @@ extern int sock_no_setsockopt(struct socket *, int, int, char *, int); extern int sock_no_sendmsg(struct kiocb *, struct socket *, - struct msghdr *, int); + struct msghdr *, size_t); extern int sock_no_recvmsg(struct kiocb *, struct socket *, - struct msghdr *, int, int); + struct msghdr *, size_t, int); extern int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma); diff -Nru a/include/net/tcp.h b/include/net/tcp.h --- a/include/net/tcp.h Mon Jan 12 20:25:28 2004 +++ b/include/net/tcp.h Mon Jan 12 20:25:28 2004 @@ -752,7 +752,7 @@ extern int tcp_v4_tw_remember_stamp(struct tcp_tw_bucket *tw); extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, - struct msghdr *msg, int size); + struct msghdr *msg, size_t size); extern ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags); extern int tcp_ioctl(struct sock *sk, @@ -846,7 +846,7 @@ extern void tcp_set_keepalive(struct sock *sk, int val); extern int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len, int nonblock, + size_t len, int nonblock, int flags, int *addr_len); extern int tcp_listen_start(struct sock *sk); diff -Nru a/include/net/udp.h b/include/net/udp.h --- a/include/net/udp.h Mon Jan 12 20:25:28 2004 +++ b/include/net/udp.h Mon Jan 12 20:25:28 2004 @@ -68,7 +68,7 @@ struct sockaddr *usin, int addr_len); extern int udp_sendmsg(struct kiocb *iocb, struct sock *sk, - struct msghdr *msg, int len); + struct msghdr *msg, size_t len); extern int udp_rcv(struct sk_buff *skb); extern int udp_ioctl(struct sock *sk, int cmd, unsigned long arg); diff -Nru a/net/appletalk/ddp.c b/net/appletalk/ddp.c --- a/net/appletalk/ddp.c Mon Jan 12 20:25:28 2004 +++ b/net/appletalk/ddp.c Mon Jan 12 20:25:28 2004 @@ -1552,7 +1552,7 @@ } static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int len) + size_t len) { struct sock *sk = sock->sk; struct atalk_sock *at = at_sk(sk); @@ -1712,7 +1712,7 @@ } static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int size, int flags) + size_t size, int flags) { struct sock *sk = sock->sk; struct sockaddr_at *sat = (struct sockaddr_at *)msg->msg_name; diff -Nru a/net/atm/br2684.c b/net/atm/br2684.c --- a/net/atm/br2684.c Mon Jan 12 20:25:28 2004 +++ b/net/atm/br2684.c Mon Jan 12 20:25:28 2004 @@ -437,6 +437,10 @@ dev_kfree_skb(skb); return; } + + /* Strip FCS if present */ + if (skb->len > 7 && skb->data[7] == 0x01) + __skb_trim(skb, skb->len - 4); } else { plen = PADLEN + ETH_HLEN; /* pad, dstmac,srcmac, ethtype */ /* first 2 chars should be 0 */ diff -Nru a/net/atm/common.c b/net/atm/common.c --- a/net/atm/common.c Mon Jan 12 20:25:28 2004 +++ b/net/atm/common.c Mon Jan 12 20:25:28 2004 @@ -463,7 +463,7 @@ int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int size, int flags) + size_t size, int flags) { struct sock *sk = sock->sk; struct atm_vcc *vcc; @@ -503,7 +503,7 @@ int vcc_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, - int total_len) + size_t total_len) { struct sock *sk = sock->sk; DEFINE_WAIT(wait); diff -Nru a/net/atm/common.h b/net/atm/common.h --- a/net/atm/common.h Mon Jan 12 20:25:28 2004 +++ b/net/atm/common.h Mon Jan 12 20:25:28 2004 @@ -14,9 +14,9 @@ int vcc_release(struct socket *sock); int vcc_connect(struct socket *sock, int itf, short vpi, int vci); int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int size, int flags); + size_t size, int flags); int vcc_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, - int total_len); + size_t total_len); unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait); int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); int vcc_setsockopt(struct socket *sock, int level, int optname, char *optval, diff -Nru a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c --- a/net/ax25/af_ax25.c Mon Jan 12 20:25:28 2004 +++ b/net/ax25/af_ax25.c Mon Jan 12 20:25:28 2004 @@ -1401,7 +1401,7 @@ } static int ax25_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sockaddr_ax25 *usax = (struct sockaddr_ax25 *)msg->msg_name; struct sock *sk = sock->sk; @@ -1410,7 +1410,8 @@ ax25_digi dtmp, *dp; unsigned char *asmptr; ax25_cb *ax25; - int lv, size, err, addr_len = msg->msg_namelen; + size_t size; + int lv, err, addr_len = msg->msg_namelen; if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR)) { return -EINVAL; @@ -1435,6 +1436,11 @@ goto out; } + if (len > ax25->ax25_dev->dev->mtu) { + err = -EMSGSIZE; + goto out; + } + if (usax != NULL) { if (usax->sax25_family != AF_AX25) { err = -EINVAL; @@ -1580,7 +1586,7 @@ } static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct sk_buff *skb; diff -Nru a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c --- a/net/bluetooth/af_bluetooth.c Mon Jan 12 20:25:28 2004 +++ b/net/bluetooth/af_bluetooth.c Mon Jan 12 20:25:28 2004 @@ -201,12 +201,13 @@ } int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len, int flags) + struct msghdr *msg, size_t len, int flags) { int noblock = flags & MSG_DONTWAIT; struct sock *sk = sock->sk; struct sk_buff *skb; - int copied, err; + size_t copied; + int err; BT_DBG("sock %p sk %p len %d", sock, sk, len); diff -Nru a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c --- a/net/bluetooth/hci_sock.c Mon Jan 12 20:25:28 2004 +++ b/net/bluetooth/hci_sock.c Mon Jan 12 20:25:28 2004 @@ -319,7 +319,8 @@ put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(skb->stamp), &skb->stamp); } -static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int len, int flags) +static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *msg, size_t len, int flags) { int noblock = flags & MSG_DONTWAIT; struct sock *sk = sock->sk; @@ -355,7 +356,8 @@ return err ? : copied; } -static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int len) +static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct hci_dev *hdev; @@ -370,9 +372,9 @@ if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE)) return -EINVAL; - if (len < 4) + if (len < 4 || len > HCI_MAX_FRAME_SIZE) return -EINVAL; - + lock_sock(sk); if (!(hdev = hci_pi(sk)->hdev)) { diff -Nru a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c --- a/net/bluetooth/l2cap.c Mon Jan 12 20:25:28 2004 +++ b/net/bluetooth/l2cap.c Mon Jan 12 20:25:28 2004 @@ -706,7 +706,8 @@ return err; } -static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int len) +static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; int err = 0; diff -Nru a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c --- a/net/bluetooth/rfcomm/sock.c Mon Jan 12 20:25:28 2004 +++ b/net/bluetooth/rfcomm/sock.c Mon Jan 12 20:25:28 2004 @@ -482,12 +482,12 @@ } static int rfcomm_sock_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc; struct sk_buff *skb; - int err, size; + int err; int sent = 0; if (msg->msg_flags & MSG_OOB) @@ -501,7 +501,7 @@ lock_sock(sk); while (len) { - size = min_t(uint, len, d->mtu); + size_t size = min(len, d->mtu); skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE, msg->msg_flags & MSG_DONTWAIT, &err); @@ -556,10 +556,11 @@ } static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; - int target, err = 0, copied = 0; + int err = 0; + size_t target, copied = 0; long timeo; if (flags & MSG_OOB) diff -Nru a/net/bluetooth/sco.c b/net/bluetooth/sco.c --- a/net/bluetooth/sco.c Mon Jan 12 20:25:28 2004 +++ b/net/bluetooth/sco.c Mon Jan 12 20:25:28 2004 @@ -630,7 +630,8 @@ return 0; } -static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int len) +static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; int err = 0; diff -Nru a/net/core/sock.c b/net/core/sock.c --- a/net/core/sock.c Mon Jan 12 20:25:28 2004 +++ b/net/core/sock.c Mon Jan 12 20:25:28 2004 @@ -966,13 +966,13 @@ } int sock_no_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, - int flags) + size_t len) { return -EOPNOTSUPP; } int sock_no_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, - int len, int flags) + size_t len, int flags) { return -EOPNOTSUPP; } diff -Nru a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c --- a/net/decnet/af_decnet.c Mon Jan 12 20:25:28 2004 +++ b/net/decnet/af_decnet.c Mon Jan 12 20:25:28 2004 @@ -1659,13 +1659,13 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct dn_scp *scp = DN_SK(sk); struct sk_buff_head *queue = &sk->sk_receive_queue; - int target = size > 1 ? 1 : 0; - int copied = 0; + size_t target = size > 1 ? 1 : 0; + size_t copied = 0; int rv = 0; struct sk_buff *skb, *nskb; struct dn_skb_cb *cb = NULL; @@ -1746,7 +1746,7 @@ } for(skb = queue->next; skb != (struct sk_buff *)queue; skb = nskb) { - int chunk = skb->len; + unsigned int chunk = skb->len; cb = DN_SKB_CB(skb); if ((chunk + copied) > size) @@ -1888,20 +1888,20 @@ } static int dn_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size) + struct msghdr *msg, size_t size) { struct sock *sk = sock->sk; struct dn_scp *scp = DN_SK(sk); - int mss; + size_t mss; struct sk_buff_head *queue = &scp->data_xmit_queue; int flags = msg->msg_flags; int err = 0; - int sent = 0; + size_t sent = 0; int addr_len = msg->msg_namelen; struct sockaddr_dn *addr = (struct sockaddr_dn *)msg->msg_name; struct sk_buff *skb = NULL; struct dn_skb_cb *cb; - int len; + size_t len; unsigned char fctype; long timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT); diff -Nru a/net/econet/af_econet.c b/net/econet/af_econet.c --- a/net/econet/af_econet.c Mon Jan 12 20:25:28 2004 +++ b/net/econet/af_econet.c Mon Jan 12 20:25:28 2004 @@ -113,11 +113,12 @@ */ static int econet_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len, int flags) + struct msghdr *msg, size_t len, int flags) { struct sock *sk = sock->sk; struct sk_buff *skb; - int copied, err; + size_t copied; + int err; msg->msg_namelen = sizeof(struct sockaddr_ec); @@ -246,7 +247,7 @@ */ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct sockaddr_ec *saddr=(struct sockaddr_ec *)msg->msg_name; @@ -307,6 +308,9 @@ if (dev == NULL) return -ENETDOWN; } + + if (len + 15 > dev->mtu) + return -EMSGSIZE; if (dev->type == ARPHRD_ECONET) { diff -Nru a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c --- a/net/ipv4/af_inet.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv4/af_inet.c Mon Jan 12 20:25:28 2004 @@ -731,7 +731,7 @@ int inet_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int size, int flags) + size_t size, int flags) { struct sock *sk = sock->sk; int addr_len = 0; @@ -746,7 +746,7 @@ int inet_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, - int size) + size_t size) { struct sock *sk = sock->sk; diff -Nru a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c --- a/net/ipv4/netfilter/ip_tables.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv4/netfilter/ip_tables.c Mon Jan 12 20:25:28 2004 @@ -260,7 +260,7 @@ struct ipt_table *table, void *userdata) { - static const char nulldevname[IFNAMSIZ]; + static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long)))); u_int16_t offset; struct iphdr *ip; u_int16_t datalen; diff -Nru a/net/ipv4/raw.c b/net/ipv4/raw.c --- a/net/ipv4/raw.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv4/raw.c Mon Jan 12 20:25:28 2004 @@ -324,7 +324,7 @@ } static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len) + size_t len) { struct inet_opt *inet = inet_sk(sk); struct ipcm_cookie ipc; @@ -335,17 +335,6 @@ u8 tos; int err; - /* This check is ONLY to check for arithmetic overflow - on integer(!) len. Not more! Real check will be made - in ip_build_xmit --ANK - - BTW socket.c -> af_*.c -> ... make multiple - invalid conversions size_t -> int. We MUST repair it f.e. - by replacing all of them with size_t and revise all - the places sort of len += sizeof(struct iphdr) - If len was ULONG_MAX-10 it would be cathastrophe --ANK - */ - err = -EMSGSIZE; if (len < 0 || len > 0xFFFF) goto out; @@ -523,10 +512,10 @@ */ int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len, int noblock, int flags, int *addr_len) + size_t len, int noblock, int flags, int *addr_len) { struct inet_opt *inet = inet_sk(sk); - int copied = 0; + size_t copied = 0; int err = -EOPNOTSUPP; struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name; struct sk_buff *skb; diff -Nru a/net/ipv4/tcp.c b/net/ipv4/tcp.c --- a/net/ipv4/tcp.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv4/tcp.c Mon Jan 12 20:25:28 2004 @@ -1029,7 +1029,7 @@ } int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int size) + size_t size) { struct iovec *iov; struct tcp_opt *tp = tcp_sk(sk); @@ -1498,7 +1498,7 @@ */ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len, int nonblock, int flags, int *addr_len) + size_t len, int nonblock, int flags, int *addr_len) { struct tcp_opt *tp = tcp_sk(sk); int copied = 0; diff -Nru a/net/ipv4/udp.c b/net/ipv4/udp.c --- a/net/ipv4/udp.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv4/udp.c Mon Jan 12 20:25:28 2004 @@ -478,7 +478,7 @@ } int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len) + size_t len) { struct inet_opt *inet = inet_sk(sk); struct udp_opt *up = udp_sk(sk); @@ -493,18 +493,7 @@ int err; int corkreq = up->corkflag || msg->msg_flags&MSG_MORE; - /* This check is ONLY to check for arithmetic overflow - on integer(!) len. Not more! Real check will be made - in ip_append_* --ANK - - BTW socket.c -> af_*.c -> ... make multiple - invalid conversions size_t -> int. We MUST repair it f.e. - by replacing all of them with size_t and revise all - the places sort of len += sizeof(struct iphdr) - If len was ULONG_MAX-10 it would be cathastrophe --ANK - */ - - if (len < 0 || len > 0xFFFF) + if (len > 0xFFFF) return -EMSGSIZE; /* @@ -782,7 +771,7 @@ */ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - int len, int noblock, int flags, int *addr_len) + size_t len, int noblock, int flags, int *addr_len) { struct inet_opt *inet = inet_sk(sk); struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name; diff -Nru a/net/ipv6/raw.c b/net/ipv6/raw.c --- a/net/ipv6/raw.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv6/raw.c Mon Jan 12 20:25:28 2004 @@ -345,13 +345,15 @@ * we return it, otherwise we block. */ -static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len, +static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk, + struct msghdr *msg, size_t len, int noblock, int flags, int *addr_len) { struct ipv6_pinfo *np = inet6_sk(sk); struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)msg->msg_name; struct sk_buff *skb; - int copied, err; + size_t copied; + int err; if (flags & MSG_OOB) return -EOPNOTSUPP; @@ -527,7 +529,8 @@ IP6_INC_STATS(Ip6OutDiscards); return err; } -static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len) +static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, + struct msghdr *msg, size_t len) { struct ipv6_txoptions opt_space; struct sockaddr_in6 * sin6 = (struct sockaddr_in6 *) msg->msg_name; diff -Nru a/net/ipv6/udp.c b/net/ipv6/udp.c --- a/net/ipv6/udp.c Mon Jan 12 20:25:28 2004 +++ b/net/ipv6/udp.c Mon Jan 12 20:25:28 2004 @@ -366,12 +366,14 @@ * return it, otherwise we block. */ -static int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len, +static int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, + struct msghdr *msg, size_t len, int noblock, int flags, int *addr_len) { struct ipv6_pinfo *np = inet6_sk(sk); struct sk_buff *skb; - int copied, err; + size_t copied; + int err; if (addr_len) *addr_len=sizeof(struct sockaddr_in6); @@ -774,7 +776,8 @@ return err; } -static int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len) +static int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk, + struct msghdr *msg, size_t len) { struct ipv6_txoptions opt_space; struct udp_opt *up = udp_sk(sk); @@ -841,7 +844,7 @@ /* Rough check on arithmetic overflow, better check is made in ip6_build_xmit */ - if (len < 0 || len > INT_MAX - sizeof(struct udphdr)) + if (len > INT_MAX - sizeof(struct udphdr)) return -EMSGSIZE; if (up->pending) { diff -Nru a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c --- a/net/ipx/af_ipx.c Mon Jan 12 20:25:28 2004 +++ b/net/ipx/af_ipx.c Mon Jan 12 20:25:28 2004 @@ -1683,7 +1683,7 @@ } static int ipx_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct ipx_opt *ipxs = ipx_sk(sk); @@ -1698,6 +1698,10 @@ if (flags & ~MSG_DONTWAIT) goto out; + /* Max possible packet size limited by 16 bit pktsize in header */ + if (len >= 65535 - sizeof(struct ipxhdr)) + goto out; + if (usipx) { if (!ipxs->port) { struct sockaddr_ipx uaddr; @@ -1744,7 +1748,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct ipx_opt *ipxs = ipx_sk(sk); diff -Nru a/net/ipx/ipx_route.c b/net/ipx/ipx_route.c --- a/net/ipx/ipx_route.c Mon Jan 12 20:25:28 2004 +++ b/net/ipx/ipx_route.c Mon Jan 12 20:25:28 2004 @@ -169,13 +169,13 @@ * Route an outgoing frame from a socket. */ int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, - struct iovec *iov, int len, int noblock) + struct iovec *iov, size_t len, int noblock) { struct sk_buff *skb; struct ipx_opt *ipxs = ipx_sk(sk); struct ipx_interface *intrfc; struct ipxhdr *ipx; - int size; + size_t size; int ipx_offset; struct ipx_route *rt = NULL; int rc; diff -Nru a/net/irda/af_irda.c b/net/irda/af_irda.c --- a/net/irda/af_irda.c Mon Jan 12 20:25:28 2004 +++ b/net/irda/af_irda.c Mon Jan 12 20:25:28 2004 @@ -1257,7 +1257,7 @@ * fragment the message if necessary */ static int irda_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct irda_sock *self; @@ -1329,12 +1329,13 @@ * after being read, regardless of how much the user actually read */ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct irda_sock *self = irda_sk(sk); struct sk_buff *skb; - int copied, err; + size_t copied; + int err; IRDA_DEBUG(4, "%s()\n", __FUNCTION__); @@ -1379,12 +1380,12 @@ * Function irda_recvmsg_stream (iocb, sock, msg, size, flags) */ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct irda_sock *self = irda_sk(sk); int noblock = flags & MSG_DONTWAIT; - int copied = 0; + size_t copied = 0; int target = 1; DECLARE_WAITQUEUE(waitq, current); @@ -1505,7 +1506,7 @@ * */ static int irda_sendmsg_dgram(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct irda_sock *self; @@ -1571,7 +1572,7 @@ */ #ifdef CONFIG_IRDA_ULTRA static int irda_sendmsg_ultra(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct irda_sock *self; @@ -1890,11 +1891,10 @@ case IAS_STRING: /* Should check charset & co */ /* Check length */ - if(ias_opt->attribute.irda_attrib_string.len > - IAS_MAX_STRING) { - kfree(ias_opt); - return -EINVAL; - } + /* The length is encoded in a __u8, and + * IAS_MAX_STRING == 256, so there is no way + * userspace can pass us a string too large. + * Jean II */ /* NULL terminate the string (avoid troubles) */ ias_opt->attribute.irda_attrib_string.string[ias_opt->attribute.irda_attrib_string.len] = '\0'; /* Add a string attribute */ diff -Nru a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c --- a/net/irda/ircomm/ircomm_tty.c Mon Jan 12 20:25:28 2004 +++ b/net/irda/ircomm/ircomm_tty.c Mon Jan 12 20:25:28 2004 @@ -38,6 +38,7 @@ #include #include #include +#include /* for MODULE_ALIAS_CHARDEV_MAJOR */ #include @@ -1411,6 +1412,7 @@ MODULE_AUTHOR("Dag Brattli "); MODULE_DESCRIPTION("IrCOMM serial TTY driver"); MODULE_LICENSE("GPL"); +MODULE_ALIAS_CHARDEV_MAJOR(IRCOMM_TTY_MAJOR); module_init(ircomm_tty_init); module_exit(ircomm_tty_cleanup); diff -Nru a/net/irda/irlap_event.c b/net/irda/irlap_event.c --- a/net/irda/irlap_event.c Mon Jan 12 20:25:28 2004 +++ b/net/irda/irlap_event.c Mon Jan 12 20:25:28 2004 @@ -932,6 +932,12 @@ /* This frame will actually be sent at the new speed */ irlap_send_rr_frame(self, CMD_FRAME); + /* The timer is set to half the normal timer to quickly + * detect a failure to negociate the new connection + * parameters. IrLAP 6.11.3.2, note 3. + * Note that currently we don't process this failure + * properly, as we should do a quick disconnect. + * Jean II */ irlap_start_final_timer(self, self->final_timeout/2); irlap_next_state(self, LAP_NRM_P); @@ -1312,7 +1318,12 @@ irlap_resend_rejected_frames(self, CMD_FRAME); self->ack_required = FALSE; - irlap_start_final_timer(self, self->final_timeout); + + /* Make sure we account for the time + * to transmit our frames. See comemnts + * in irlap_send_data_primary_poll(). + * Jean II */ + irlap_start_final_timer(self, 2 * self->final_timeout); /* Keep state, do not move this line */ irlap_next_state(self, LAP_NRM_P); @@ -1352,8 +1363,9 @@ /* Resend rejected frames */ irlap_resend_rejected_frames(self, CMD_FRAME); - /* Give peer some time to retransmit! */ - irlap_start_final_timer(self, self->final_timeout); + /* Give peer some time to retransmit! + * But account for our own Tx. */ + irlap_start_final_timer(self, 2 * self->final_timeout); /* Keep state, do not move this line */ irlap_next_state(self, LAP_NRM_P); @@ -1450,6 +1462,8 @@ /* Resend rejected frames */ irlap_resend_rejected_frames(self, CMD_FRAME); + /* Final timer ??? Jean II */ + irlap_next_state(self, LAP_NRM_P); } else if (ret == NR_INVALID) { IRDA_DEBUG(1, "%s(), Received RR with " @@ -1541,7 +1555,7 @@ irlap_send_rr_frame(self, CMD_FRAME); } else irlap_resend_rejected_frames(self, CMD_FRAME); - irlap_start_final_timer(self, self->final_timeout); + irlap_start_final_timer(self, 2 * self->final_timeout); break; case RECV_SREJ_RSP: irlap_update_nr_received(self, info->nr); @@ -1550,7 +1564,7 @@ irlap_send_rr_frame(self, CMD_FRAME); } else irlap_resend_rejected_frame(self, CMD_FRAME); - irlap_start_final_timer(self, self->final_timeout); + irlap_start_final_timer(self, 2 * self->final_timeout); break; case RECV_RD_RSP: IRDA_DEBUG(1, "%s(), RECV_RD_RSP\n", __FUNCTION__); diff -Nru a/net/irda/irlap_frame.c b/net/irda/irlap_frame.c --- a/net/irda/irlap_frame.c Mon Jan 12 20:25:28 2004 +++ b/net/irda/irlap_frame.c Mon Jan 12 20:25:28 2004 @@ -779,6 +779,7 @@ void irlap_send_data_primary_poll(struct irlap_cb *self, struct sk_buff *skb) { struct sk_buff *tx_skb; + int transmission_time; /* Stop P timer */ del_timer(&self->poll_timer); @@ -829,13 +830,49 @@ } } + /* How much time we took for transmission of all frames. + * We don't know, so let assume we used the full window. Jean II */ + transmission_time = self->final_timeout; + + /* Reset parameter so that we can fill next window */ self->window = self->window_size; + #ifdef CONFIG_IRDA_DYNAMIC_WINDOW + /* Remove what we have not used. Just do a prorata of the + * bytes left in window to window capacity. + * See max_line_capacities[][] in qos.c for details. Jean II */ + transmission_time -= (self->final_timeout * self->bytes_left + / self->line_capacity); + IRDA_DEBUG(4, "%s() adjusting transmission_time : ft=%d, bl=%d, lc=%d -> tt=%d\n", __FUNCTION__, self->final_timeout, self->bytes_left, self->line_capacity, transmission_time); + /* We are allowed to transmit a maximum number of bytes again. */ self->bytes_left = self->line_capacity; #endif /* CONFIG_IRDA_DYNAMIC_WINDOW */ - irlap_start_final_timer(self, self->final_timeout); + /* + * The network layer has a intermediate buffer between IrLAP + * and the IrDA driver which can contain 8 frames. So, even + * though IrLAP is currently sending the *last* frame of the + * tx-window, the driver most likely has only just started + * sending the *first* frame of the same tx-window. + * I.e. we are always at the very begining of or Tx window. + * Now, we are supposed to set the final timer from the end + * of our tx-window to let the other peer reply. So, we need + * to add extra time to compensate for the fact that we + * are really at the start of tx-window, otherwise the final timer + * might expire before he can answer... + * Jean II + */ + irlap_start_final_timer(self, self->final_timeout + transmission_time); + + /* + * The clever amongst you might ask why we do this adjustement + * only here, and not in all the other cases in irlap_event.c. + * In all those other case, we only send a very short management + * frame (few bytes), so the adjustement would be lost in the + * noise... + * The exception of course is irlap_resend_rejected_frame(). + * Jean II */ } /* @@ -1003,7 +1040,7 @@ } #if 0 /* Not yet */ /* - * We can now fill the window with additinal data frames + * We can now fill the window with additional data frames */ while (skb_queue_len( &self->txq) > 0) { diff -Nru a/net/key/af_key.c b/net/key/af_key.c --- a/net/key/af_key.c Mon Jan 12 20:25:28 2004 +++ b/net/key/af_key.c Mon Jan 12 20:25:28 2004 @@ -2655,7 +2655,7 @@ } static int pfkey_sendmsg(struct kiocb *kiocb, - struct socket *sock, struct msghdr *msg, int len) + struct socket *sock, struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct sk_buff *skb = NULL; @@ -2697,7 +2697,7 @@ } static int pfkey_recvmsg(struct kiocb *kiocb, - struct socket *sock, struct msghdr *msg, int len, + struct socket *sock, struct msghdr *msg, size_t len, int flags) { struct sock *sk = sock->sk; diff -Nru a/net/llc/af_llc.c b/net/llc/af_llc.c --- a/net/llc/af_llc.c Mon Jan 12 20:25:28 2004 +++ b/net/llc/af_llc.c Mon Jan 12 20:25:28 2004 @@ -671,12 +671,13 @@ * Returns non-negative upon success, negative otherwise. */ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct sockaddr_llc *uaddr = (struct sockaddr_llc *)msg->msg_name; struct sk_buff *skb; - int rc = -ENOMEM, copied = 0, timeout; + size_t copied = 0; + int rc = -ENOMEM, timeout; int noblock = flags & MSG_DONTWAIT; dprintk("%s: receiving in %02X from %02X\n", __FUNCTION__, @@ -725,7 +726,7 @@ * Returns non-negative upon success, negative otherwise. */ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct llc_opt *llc = llc_sk(sk); @@ -734,7 +735,8 @@ int noblock = flags & MSG_DONTWAIT; struct net_device *dev; struct sk_buff *skb; - int rc = -EINVAL, size = 0, copied = 0, hdrlen; + size_t size = 0; + int rc = -EINVAL, copied = 0, hdrlen; dprintk("%s: sending from %02X to %02X\n", __FUNCTION__, llc->laddr.lsap, llc->daddr.lsap); diff -Nru a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c --- a/net/netlink/af_netlink.c Mon Jan 12 20:25:28 2004 +++ b/net/netlink/af_netlink.c Mon Jan 12 20:25:28 2004 @@ -601,7 +601,7 @@ } static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; @@ -641,7 +641,7 @@ } err = -EMSGSIZE; - if ((unsigned)len > sk->sk_sndbuf - 32) + if (len > sk->sk_sndbuf - 32) goto out; err = -ENOBUFS; skb = alloc_skb(len, GFP_KERNEL); @@ -683,7 +683,7 @@ } static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock, - struct msghdr *msg, int len, + struct msghdr *msg, size_t len, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); @@ -691,7 +691,7 @@ struct sock *sk = sock->sk; struct netlink_opt *nlk = nlk_sk(sk); int noblock = flags&MSG_DONTWAIT; - int copied; + size_t copied; struct sk_buff *skb; int err; diff -Nru a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c --- a/net/netrom/af_netrom.c Mon Jan 12 20:25:28 2004 +++ b/net/netrom/af_netrom.c Mon Jan 12 20:25:28 2004 @@ -1010,7 +1010,7 @@ } static int nr_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; nr_cb *nr = nr_sk(sk); @@ -1119,11 +1119,11 @@ } static int nr_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name; - int copied; + size_t copied; struct sk_buff *skb; int er; diff -Nru a/net/packet/af_packet.c b/net/packet/af_packet.c --- a/net/packet/af_packet.c Mon Jan 12 20:25:28 2004 +++ b/net/packet/af_packet.c Mon Jan 12 20:25:28 2004 @@ -284,7 +284,7 @@ */ static int packet_sendmsg_spkt(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct sockaddr_pkt *saddr=(struct sockaddr_pkt *)msg->msg_name; @@ -659,7 +659,7 @@ static int packet_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct sockaddr_ll *saddr=(struct sockaddr_ll *)msg->msg_name; @@ -1007,7 +1007,7 @@ */ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len, int flags) + struct msghdr *msg, size_t len, int flags) { struct sock *sk = sock->sk; struct sk_buff *skb; diff -Nru a/net/rose/af_rose.c b/net/rose/af_rose.c --- a/net/rose/af_rose.c Mon Jan 12 20:25:28 2004 +++ b/net/rose/af_rose.c Mon Jan 12 20:25:28 2004 @@ -1010,7 +1010,7 @@ } static int rose_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; rose_cb *rose = rose_sk(sk); @@ -1174,15 +1174,15 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, int flags) + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; rose_cb *rose = rose_sk(sk); struct sockaddr_rose *srose = (struct sockaddr_rose *)msg->msg_name; - int copied, qbit; + size_t copied; unsigned char *asmptr; struct sk_buff *skb; - int n, er; + int n, er, qbit; /* * This works for seqpacket too. The receiver has ordered the queue for diff -Nru a/net/sctp/socket.c b/net/sctp/socket.c --- a/net/sctp/socket.c Mon Jan 12 20:25:28 2004 +++ b/net/sctp/socket.c Mon Jan 12 20:25:28 2004 @@ -90,7 +90,7 @@ static inline void sctp_set_owner_w(struct sctp_chunk *chunk); static void sctp_wfree(struct sk_buff *skb); static int sctp_wait_for_sndbuf(struct sctp_association *, long *timeo_p, - int msg_len); + size_t msg_len); static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p); static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p); static int sctp_wait_for_accept(struct sock *sk, long timeo); @@ -943,7 +943,7 @@ SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *, sctp_cmsgs_t *); SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, - struct msghdr *msg, int msg_len) + struct msghdr *msg, size_t msg_len) { struct sctp_opt *sp; struct sctp_endpoint *ep; @@ -965,7 +965,7 @@ struct list_head *pos; int msg_flags = msg->msg_flags; - SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %d)\n", + SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %u)\n", sk, msg, msg_len); err = 0; @@ -1021,7 +1021,7 @@ associd = sinfo->sinfo_assoc_id; } - SCTP_DEBUG_PRINTK("msg_len: %d, sinfo_flags: 0x%x\n", + SCTP_DEBUG_PRINTK("msg_len: %u, sinfo_flags: 0x%x\n", msg_len, sinfo_flags); /* MSG_EOF or MSG_ABORT cannot be set on a TCP-style socket. */ @@ -1377,7 +1377,7 @@ static struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int, int *); SCTP_STATIC int sctp_recvmsg(struct kiocb *iocb, struct sock *sk, - struct msghdr *msg, int len, int noblock, + struct msghdr *msg, size_t len, int noblock, int flags, int *addr_len) { struct sctp_ulpevent *event = NULL; @@ -4157,14 +4157,14 @@ /* Helper function to wait for space in the sndbuf. */ static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, - int msg_len) + size_t msg_len) { struct sock *sk = asoc->base.sk; int err = 0; long current_timeo = *timeo_p; DEFINE_WAIT(wait); - SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%d\n", + SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%u\n", asoc, (long)(*timeo_p), msg_len); /* Increment the association's refcnt. */ diff -Nru a/net/socket.c b/net/socket.c --- a/net/socket.c Mon Jan 12 20:25:28 2004 +++ b/net/socket.c Mon Jan 12 20:25:28 2004 @@ -523,7 +523,8 @@ sock->file=NULL; } -static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int size) +static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *msg, size_t size) { struct sock_iocb *si = kiocb_to_siocb(iocb); int err; @@ -540,7 +541,7 @@ return sock->ops->sendmsg(iocb, sock, msg, size); } -int sock_sendmsg(struct socket *sock, struct msghdr *msg, int size) +int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) { struct kiocb iocb; int ret; @@ -553,7 +554,8 @@ } -static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, int size, int flags) +static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *msg, size_t size, int flags) { int err; struct sock_iocb *si = kiocb_to_siocb(iocb); @@ -571,7 +573,8 @@ return sock->ops->recvmsg(iocb, sock, msg, size, flags); } -int sock_recvmsg(struct socket *sock, struct msghdr *msg, int size, int flags) +int sock_recvmsg(struct socket *sock, struct msghdr *msg, + size_t size, int flags) { struct kiocb iocb; int ret; @@ -668,7 +671,7 @@ } int sock_readv_writev(int type, struct inode * inode, struct file * file, - const struct iovec * iov, long count, long size) + const struct iovec * iov, long count, size_t size) { struct msghdr msg; struct socket *sock; diff -Nru a/net/unix/af_unix.c b/net/unix/af_unix.c --- a/net/unix/af_unix.c Mon Jan 12 20:25:28 2004 +++ b/net/unix/af_unix.c Mon Jan 12 20:25:28 2004 @@ -1176,7 +1176,7 @@ */ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; @@ -1217,7 +1217,7 @@ goto out; err = -EMSGSIZE; - if ((unsigned)len > sk->sk_sndbuf - 32) + if (len > sk->sk_sndbuf - 32) goto out; skb = sock_alloc_send_skb(sk, len, msg->msg_flags&MSG_DONTWAIT, &err); @@ -1324,7 +1324,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; @@ -1447,7 +1447,7 @@ } static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, + struct msghdr *msg, size_t size, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(iocb); @@ -1555,7 +1555,7 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, + struct msghdr *msg, size_t size, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(iocb); diff -Nru a/net/x25/af_x25.c b/net/x25/af_x25.c --- a/net/x25/af_x25.c Mon Jan 12 20:25:28 2004 +++ b/net/x25/af_x25.c Mon Jan 12 20:25:28 2004 @@ -910,7 +910,7 @@ } static int x25_sendmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int len) + struct msghdr *msg, size_t len) { struct sock *sk = sock->sk; struct x25_opt *x25 = x25_sk(sk); @@ -919,7 +919,8 @@ struct sk_buff *skb; unsigned char *asmptr; int noblock = msg->msg_flags & MSG_DONTWAIT; - int size, qbit = 0, rc = -EINVAL; + size_t size; + int qbit = 0, rc = -EINVAL; if (msg->msg_flags & ~(MSG_DONTWAIT | MSG_OOB | MSG_EOR)) goto out; @@ -1085,13 +1086,14 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *msg, int size, + struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; struct x25_opt *x25 = x25_sk(sk); struct sockaddr_x25 *sx25 = (struct sockaddr_x25 *)msg->msg_name; - int copied, qbit; + size_t copied; + int qbit; struct sk_buff *skb; unsigned char *asmptr; int rc = -ENOTCONN;