X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=fs%2Fcompat_ioctl.c;h=9c3fd07f35e0f25b04763a021c9c636e22ce43e5;hb=68f3e6622bb60c6b477971b56d1913077834fdcd;hp=b9e3357bcc2ead562e138ea71b89d13120d03f41;hpb=e6005a85acb9609326512ecc784859831cfb24a3;p=powerpc.git diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index b9e3357bcc..9c3fd07f35 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -319,22 +319,21 @@ struct ifconf32 { static int dev_ifname32(unsigned int fd, unsigned int cmd, unsigned long arg) { - struct net_device *dev; - struct ifreq32 ifr32; + struct ifreq __user *uifr; int err; - if (copy_from_user(&ifr32, compat_ptr(arg), sizeof(ifr32))) + uifr = compat_alloc_user_space(sizeof(struct ifreq)); + if (copy_in_user(uifr, compat_ptr(arg), sizeof(struct ifreq32))); return -EFAULT; - dev = dev_get_by_index(ifr32.ifr_ifindex); - if (!dev) - return -ENODEV; + err = sys_ioctl(fd, SIOCGIFNAME, (unsigned long)uifr); + if (err) + return err; - strlcpy(ifr32.ifr_name, dev->name, sizeof(ifr32.ifr_name)); - dev_put(dev); - - err = copy_to_user(compat_ptr(arg), &ifr32, sizeof(ifr32)); - return (err ? -EFAULT : 0); + if (copy_in_user(compat_ptr(arg), uifr, sizeof(struct ifreq32))) + return -EFAULT; + + return 0; } static int dev_ifconf(unsigned int fd, unsigned int cmd, unsigned long arg)