net: switch sock_setbindtodevice to sockptr_t
authorChristoph Hellwig <hch@lst.de>
Thu, 23 Jul 2020 06:08:48 +0000 (08:08 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 24 Jul 2020 22:41:53 +0000 (15:41 -0700)
Pass a sockptr_t to prepare for set_fs-less handling of the kernel
pointer from bpf-cgroup.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c

index 71fc7e4..5b55bc9 100644 (file)
@@ -609,8 +609,7 @@ int sock_bindtoindex(struct sock *sk, int ifindex, bool lock_sk)
 }
 EXPORT_SYMBOL(sock_bindtoindex);
 
-static int sock_setbindtodevice(struct sock *sk, char __user *optval,
-                               int optlen)
+static int sock_setbindtodevice(struct sock *sk, sockptr_t optval, int optlen)
 {
        int ret = -ENOPROTOOPT;
 #ifdef CONFIG_NETDEVICES
@@ -632,7 +631,7 @@ static int sock_setbindtodevice(struct sock *sk, char __user *optval,
        memset(devname, 0, sizeof(devname));
 
        ret = -EFAULT;
-       if (copy_from_user(devname, optval, optlen))
+       if (copy_from_sockptr(devname, optval, optlen))
                goto out;
 
        index = 0;
@@ -840,7 +839,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
         */
 
        if (optname == SO_BINDTODEVICE)
-               return sock_setbindtodevice(sk, optval, optlen);
+               return sock_setbindtodevice(sk, USER_SOCKPTR(optval), optlen);
 
        if (optlen < sizeof(int))
                return -EINVAL;