]> Pileus Git - ~andy/linux/blobdiff - net/socket.c
Merge branch 'usb-target-merge' of git://git.kernel.org/pub/scm/linux/kernel/git...
[~andy/linux] / net / socket.c
index 851edcd6b0982d5a820da29e2145be75bddcff9c..2a2898ce596e343d555d3bef8bceecc81e15f651 100644 (file)
@@ -1234,8 +1234,7 @@ int __sock_create(struct net *net, int family, int type, int protocol,
         */
        sock = sock_alloc();
        if (!sock) {
-               if (net_ratelimit())
-                       printk(KERN_WARNING "socket: no more sockets\n");
+               net_warn_ratelimited("socket: no more sockets\n");
                return -ENFILE; /* Not exactly a match, but its the
                                   closest posix thing */
        }
@@ -1479,7 +1478,7 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
        sock = sockfd_lookup_light(fd, &err, &fput_needed);
        if (sock) {
                somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;
-               if ((unsigned)backlog > somaxconn)
+               if ((unsigned int)backlog > somaxconn)
                        backlog = somaxconn;
 
                err = security_socket_listen(sock, backlog);
@@ -1691,7 +1690,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
  */
 
 SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
-               unsigned, flags, struct sockaddr __user *, addr,
+               unsigned int, flags, struct sockaddr __user *, addr,
                int, addr_len)
 {
        struct socket *sock;
@@ -1738,7 +1737,7 @@ out:
  */
 
 SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
-               unsigned, flags)
+               unsigned int, flags)
 {
        return sys_sendto(fd, buff, len, flags, NULL, 0);
 }
@@ -1750,7 +1749,7 @@ SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
  */
 
 SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
-               unsigned, flags, struct sockaddr __user *, addr,
+               unsigned int, flags, struct sockaddr __user *, addr,
                int __user *, addr_len)
 {
        struct socket *sock;
@@ -1795,7 +1794,7 @@ out:
  */
 
 asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size,
-                        unsigned flags)
+                        unsigned int flags)
 {
        return sys_recvfrom(fd, ubuf, size, flags, NULL, NULL);
 }
@@ -1897,7 +1896,7 @@ struct used_address {
 };
 
 static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
-                        struct msghdr *msg_sys, unsigned flags,
+                        struct msghdr *msg_sys, unsigned int flags,
                         struct used_address *used_address)
 {
        struct compat_msghdr __user *msg_compat =
@@ -1908,7 +1907,7 @@ static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
            __attribute__ ((aligned(sizeof(__kernel_size_t))));
        /* 20 is size of ipv6_pktinfo */
        unsigned char *ctl_buf = ctl;
-       int err, ctl_len, iov_size, total_len;
+       int err, ctl_len, total_len;
 
        err = -EFAULT;
        if (MSG_CMSG_COMPAT & flags) {
@@ -1917,16 +1916,13 @@ static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
        } else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr)))
                return -EFAULT;
 
-       /* do not move before msg_sys is valid */
-       err = -EMSGSIZE;
-       if (msg_sys->msg_iovlen > UIO_MAXIOV)
-               goto out;
-
-       /* Check whether to allocate the iovec area */
-       err = -ENOMEM;
-       iov_size = msg_sys->msg_iovlen * sizeof(struct iovec);
        if (msg_sys->msg_iovlen > UIO_FASTIOV) {
-               iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
+               err = -EMSGSIZE;
+               if (msg_sys->msg_iovlen > UIO_MAXIOV)
+                       goto out;
+               err = -ENOMEM;
+               iov = kmalloc(msg_sys->msg_iovlen * sizeof(struct iovec),
+                             GFP_KERNEL);
                if (!iov)
                        goto out;
        }
@@ -2005,7 +2001,7 @@ out_freectl:
                sock_kfree_s(sock->sk, ctl_buf, ctl_len);
 out_freeiov:
        if (iov != iovstack)
-               sock_kfree_s(sock->sk, iov, iov_size);
+               kfree(iov);
 out:
        return err;
 }
@@ -2014,7 +2010,7 @@ out:
  *     BSD sendmsg interface
  */
 
-SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
+SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned int, flags)
 {
        int fput_needed, err;
        struct msghdr msg_sys;
@@ -2096,14 +2092,14 @@ SYSCALL_DEFINE4(sendmmsg, int, fd, struct mmsghdr __user *, mmsg,
 }
 
 static int __sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
-                        struct msghdr *msg_sys, unsigned flags, int nosec)
+                        struct msghdr *msg_sys, unsigned int flags, int nosec)
 {
        struct compat_msghdr __user *msg_compat =
            (struct compat_msghdr __user *)msg;
        struct iovec iovstack[UIO_FASTIOV];
        struct iovec *iov = iovstack;
        unsigned long cmsg_ptr;
-       int err, iov_size, total_len, len;
+       int err, total_len, len;
 
        /* kernel mode address */
        struct sockaddr_storage addr;
@@ -2118,15 +2114,13 @@ static int __sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
        } else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr)))
                return -EFAULT;
 
-       err = -EMSGSIZE;
-       if (msg_sys->msg_iovlen > UIO_MAXIOV)
-               goto out;
-
-       /* Check whether to allocate the iovec area */
-       err = -ENOMEM;
-       iov_size = msg_sys->msg_iovlen * sizeof(struct iovec);
        if (msg_sys->msg_iovlen > UIO_FASTIOV) {
-               iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
+               err = -EMSGSIZE;
+               if (msg_sys->msg_iovlen > UIO_MAXIOV)
+                       goto out;
+               err = -ENOMEM;
+               iov = kmalloc(msg_sys->msg_iovlen * sizeof(struct iovec),
+                             GFP_KERNEL);
                if (!iov)
                        goto out;
        }
@@ -2180,7 +2174,7 @@ static int __sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
 
 out_freeiov:
        if (iov != iovstack)
-               sock_kfree_s(sock->sk, iov, iov_size);
+               kfree(iov);
 out:
        return err;
 }
@@ -2524,6 +2518,12 @@ EXPORT_SYMBOL(sock_unregister);
 static int __init sock_init(void)
 {
        int err;
+       /*
+        *      Initialize the network sysctl infrastructure.
+        */
+       err = net_sysctl_init();
+       if (err)
+               goto out;
 
        /*
         *      Initialize sock SLAB cache.
@@ -3223,7 +3223,7 @@ static int compat_sock_ioctl_trans(struct file *file, struct socket *sock,
        return -ENOIOCTLCMD;
 }
 
-static long compat_sock_ioctl(struct file *file, unsigned cmd,
+static long compat_sock_ioctl(struct file *file, unsigned int cmd,
                              unsigned long arg)
 {
        struct socket *sock = file->private_data;