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:

committed by
David S. Miller

szülő
a307593a64
commit
7c1552da90
@@ -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;
|
||||
|
Reference in New Issue
Block a user