gpiolib: shifters used as flags in gpio_ioctl()
Subsystems (2)
PATCH 1/1 gpiolib: shifters used as flags in gpio_ioctl()
We weren't testing whether the bits were set correctly because we used shifters as flags. It means that we give the user incorrect line information in this new ioctl.
Fixes 521a2ad6f862 ('gpio: add userspace ABI for GPIO line information')
Signed-off-by Dan Carpenter <[email protected]>
drivers/gpio/gpiolib.c +9 -7
@@ -380,17 +380,19 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)* this GPIO so it can't use it. */ lineinfo.flags =0 ; -if (desc->flags & (FLAG_REQUESTED |FLAG_IS_HOGGED | -FLAG_USED_AS_IRQ |FLAG_EXPORT | -FLAG_SYSFS )) +if (desc->flags & ((1 <<FLAG_REQUESTED ) | + (1 <<FLAG_IS_HOGGED ) | + (1 <<FLAG_USED_AS_IRQ ) | + (1 <<FLAG_EXPORT ) | + (1 <<FLAG_SYSFS ))) lineinfo.flags |=GPIOLINE_FLAG_KERNEL ; -if (desc->flags &FLAG_IS_OUT ) +if (test_bit (FLAG_IS_OUT , &desc->flags)) lineinfo.flags |=GPIOLINE_FLAG_IS_OUT ; -if (desc->flags &FLAG_ACTIVE_LOW ) +if (test_bit (FLAG_ACTIVE_LOW , &desc->flags)) lineinfo.flags |=GPIOLINE_FLAG_ACTIVE_LOW ; -if (desc->flags &FLAG_OPEN_DRAIN ) +if (test_bit (FLAG_OPEN_DRAIN , &desc->flags)) lineinfo.flags |=GPIOLINE_FLAG_OPEN_DRAIN ; -if (desc->flags &FLAG_OPEN_SOURCE ) +if (test_bit (FLAG_OPEN_SOURCE , &desc->flags)) lineinfo.flags |=GPIOLINE_FLAG_OPEN_SOURCE ;if (copy_to_user (ip, &lineinfo,sizeof (lineinfo)))
Quoted 6 lines · Dan Carpenter
We weren't testing whether the bits were set correctly because we used shifters as flags. It means that we give the user incorrect line information in this new ioctl.
Fixes 521a2ad6f862 ('gpio: add userspace ABI for GPIO line information')Signed-off-by Dan Carpenter <[email protected]>
Already wrote and queued a similar patch yesterday, but thanks anyway Dan!
Yours,
Linus Walleij