mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 22:51:37 +00:00
devinet_ioctl(): take copyin/copyout to caller
Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
36fd633ec9
commit
03aef17bb7
4 changed files with 35 additions and 46 deletions
|
@ -872,6 +872,8 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
|||
struct sock *sk = sock->sk;
|
||||
int err = 0;
|
||||
struct net *net = sock_net(sk);
|
||||
void __user *p = (void __user *)arg;
|
||||
struct ifreq ifr;
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCGSTAMP:
|
||||
|
@ -891,17 +893,26 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
|||
err = arp_ioctl(net, cmd, (void __user *)arg);
|
||||
break;
|
||||
case SIOCGIFADDR:
|
||||
case SIOCSIFADDR:
|
||||
case SIOCGIFBRDADDR:
|
||||
case SIOCSIFBRDADDR:
|
||||
case SIOCGIFNETMASK:
|
||||
case SIOCSIFNETMASK:
|
||||
case SIOCGIFDSTADDR:
|
||||
case SIOCGIFPFLAGS:
|
||||
if (copy_from_user(&ifr, p, sizeof(struct ifreq)))
|
||||
return -EFAULT;
|
||||
err = devinet_ioctl(net, cmd, &ifr);
|
||||
if (!err && copy_to_user(p, &ifr, sizeof(struct ifreq)))
|
||||
err = -EFAULT;
|
||||
break;
|
||||
|
||||
case SIOCSIFADDR:
|
||||
case SIOCSIFBRDADDR:
|
||||
case SIOCSIFNETMASK:
|
||||
case SIOCSIFDSTADDR:
|
||||
case SIOCSIFPFLAGS:
|
||||
case SIOCGIFPFLAGS:
|
||||
case SIOCSIFFLAGS:
|
||||
err = devinet_ioctl(net, cmd, (void __user *)arg);
|
||||
if (copy_from_user(&ifr, p, sizeof(struct ifreq)))
|
||||
return -EFAULT;
|
||||
err = devinet_ioctl(net, cmd, &ifr);
|
||||
break;
|
||||
default:
|
||||
if (sk->sk_prot->ioctl)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue