On Fri, May 27, 2016 at 02:32:53PM +0200, Linus Walleij wrote: > If we're using the compatible ioctl() we need to handle the > argument pointer in a special way or there will be trouble. > > Fixes: 3c702e9987e2 ("gpio: add a userspace chardev ABI for GPIOs") > Reported-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Reviewed-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> > --- > drivers/gpio/gpiolib.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index e901d2666b46..f1ef27014e6e 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -20,6 +20,7 @@ > #include <linux/cdev.h> > #include <linux/fs.h> > #include <linux/uaccess.h> > +#include <linux/compat.h> > #include <uapi/linux/gpio.h> > > #include "gpiolib.h" > @@ -316,7 +317,7 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > { > struct gpio_device *gdev = filp->private_data; > struct gpio_chip *chip = gdev->chip; > - int __user *ip = (int __user *)arg; > + void __user *ip = (void __user *)arg; > > /* We fail any subsequent ioctl():s when the chip is gone */ > if (!chip) > @@ -388,6 +389,14 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > return -EINVAL; > } > > +#ifdef CONFIG_COMPAT > +static long gpio_ioctl_compat(struct file *filp, unsigned int cmd, > + unsigned long arg) > +{ > + return gpio_ioctl(filep, cmd, (unsigned long)compat_ptr(arg)); > +} > +#endif > + > /** > * gpio_chrdev_open() - open the chardev for ioctl operations > * @inode: inode for this chardev > @@ -431,7 +440,9 @@ static const struct file_operations gpio_fileops = { > .owner = THIS_MODULE, > .llseek = noop_llseek, > .unlocked_ioctl = gpio_ioctl, > - .compat_ioctl = gpio_ioctl, > +#ifdef CONFIG_COMPAT > + .compat_ioctl = gpio_ioctl_compat, > +#endif > }; > > static void gpiodevice_release(struct device *dev) > -- > 2.4.11 > -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html