Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 31 Oct 2010 01:42:58 +0000 (18:42 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 31 Oct 2010 01:42:58 +0000 (18:42 -0700)
* 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

1  2 
net/socket.c

diff --combined net/socket.c
@@@ -305,17 -305,19 +305,17 @@@ static const struct super_operations so
        .statfs         = simple_statfs,
  };
  
 -static int sockfs_get_sb(struct file_system_type *fs_type,
 -                       int flags, const char *dev_name, void *data,
 -                       struct vfsmount *mnt)
 +static struct dentry *sockfs_mount(struct file_system_type *fs_type,
 +                       int flags, const char *dev_name, void *data)
  {
 -      return get_sb_pseudo(fs_type, "socket:", &sockfs_ops, SOCKFS_MAGIC,
 -                           mnt);
 +      return mount_pseudo(fs_type, "socket:", &sockfs_ops, SOCKFS_MAGIC);
  }
  
  static struct vfsmount *sock_mnt __read_mostly;
  
  static struct file_system_type sock_fs_type = {
        .name =         "sockfs",
 -      .get_sb =       sockfs_get_sb,
 +      .mount =        sockfs_mount,
        .kill_sb =      kill_anon_super,
  };
  
@@@ -375,7 -377,7 +375,7 @@@ static int sock_alloc_file(struct socke
                  &socket_file_ops);
        if (unlikely(!file)) {
                /* drop dentry, keep inode */
 -              atomic_inc(&path.dentry->d_inode->i_count);
 +              ihold(path.dentry->d_inode);
                path_put(&path);
                put_unused_fd(fd);
                return -ENFILE;
@@@ -478,7 -480,6 +478,7 @@@ static struct socket *sock_alloc(void
        sock = SOCKET_I(inode);
  
        kmemcheck_annotate_bitfield(sock, type);
 +      inode->i_ino = get_next_ino();
        inode->i_mode = S_IFSOCK | S_IRWXUGO;
        inode->i_uid = current_fsuid();
        inode->i_gid = current_fsgid();
@@@ -1144,7 -1145,7 +1144,7 @@@ call_kill
  }
  EXPORT_SYMBOL(sock_wake_async);
  
 -static int __sock_create(struct net *net, int family, int type, int protocol,
 +int __sock_create(struct net *net, int family, int type, int protocol,
                         struct socket **res, int kern)
  {
        int err;
@@@ -1256,7 -1257,6 +1256,7 @@@ out_release
        rcu_read_unlock();
        goto out_sock_release;
  }
 +EXPORT_SYMBOL(__sock_create);
  
  int sock_create(int family, int type, int protocol, struct socket **res)
  {
@@@ -1652,6 -1652,8 +1652,8 @@@ SYSCALL_DEFINE6(sendto, int, fd, void _
        struct iovec iov;
        int fput_needed;
  
+       if (len > INT_MAX)
+               len = INT_MAX;
        sock = sockfd_lookup_light(fd, &err, &fput_needed);
        if (!sock)
                goto out;
@@@ -1709,6 -1711,8 +1711,8 @@@ SYSCALL_DEFINE6(recvfrom, int, fd, voi
        int err, err2;
        int fput_needed;
  
+       if (size > INT_MAX)
+               size = INT_MAX;
        sock = sockfd_lookup_light(fd, &err, &fput_needed);
        if (!sock)
                goto out;