ipv6: lift copy_from_user out of ipv6_route_ioctl

Prepare for better compat ioctl handling by moving the user copy out
of ipv6_route_ioctl.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Christoph Hellwig
2020-05-18 08:28:05 +02:00
committed by David S. Miller
szülő a307593a64
commit 7c1552da90
3 fájl változott, egészen pontosan 29 új sor hozzáadva és 36 régi sor törölve

Fájl megtekintése

@@ -542,21 +542,25 @@ EXPORT_SYMBOL(inet6_getname);
int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{
void __user *argp = (void __user *)arg;
struct sock *sk = sock->sk;
struct net *net = sock_net(sk);
switch (cmd) {
case SIOCADDRT:
case SIOCDELRT:
return ipv6_route_ioctl(net, cmd, (void __user *)arg);
case SIOCDELRT: {
struct in6_rtmsg rtmsg;
if (copy_from_user(&rtmsg, argp, sizeof(rtmsg)))
return -EFAULT;
return ipv6_route_ioctl(net, cmd, &rtmsg);
}
case SIOCSIFADDR:
return addrconf_add_ifaddr(net, (void __user *) arg);
return addrconf_add_ifaddr(net, argp);
case SIOCDIFADDR:
return addrconf_del_ifaddr(net, (void __user *) arg);
return addrconf_del_ifaddr(net, argp);
case SIOCSIFDSTADDR:
return addrconf_set_dstaddr(net, (void __user *) arg);
return addrconf_set_dstaddr(net, argp);
default:
if (!sk->sk_prot->ioctl)
return -ENOIOCTLCMD;