X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fcompat_ioctl.c;h=bd26e4cbb994f810b0ce8dc8ce3780356e0f66fa;hb=9bfb52ad716e74785b2402b7ea17f30e0344b8e8;hp=b9e3357bcc2ead562e138ea71b89d13120d03f41;hpb=dd6d1844af33acb4edd0a40b1770d091a22c94be;p=linux-2.6 diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index b9e3357bcc..bd26e4cbb9 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -108,7 +108,6 @@ #include #include #include -#include #ifdef CONFIG_SPARC #include @@ -319,22 +318,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; + + if (copy_in_user(compat_ptr(arg), uifr, sizeof(struct ifreq32))) + return -EFAULT; - 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); + return 0; } static int dev_ifconf(unsigned int fd, unsigned int cmd, unsigned long arg) @@ -3003,7 +3001,7 @@ static int __init init_sys32_ioctl(void) int i; for (i = 0; i < ARRAY_SIZE(ioctl_start); i++) { - if (ioctl_start[i].next != 0) { + if (ioctl_start[i].next) { printk("ioctl translation %d bad\n",i); return -1; }