Messages in this thread | | | From | Arnd Bergmann <> | Date | Sat, 24 Oct 2020 21:21:11 +0200 | Subject | Re: [PATCH] char: ppdev: check if ioctl argument is present and valid |
| |
On Sat, Oct 24, 2020 at 5:54 PM harshal chaudhari <harshalchau04@gmail.com> wrote: > On Tue, Oct 13, 2020 at 4:42 PM David Laight <David.Laight@aculab.com> wrote:
> So I am a little bit confused about this check whether it's required or not > Please could you point me in the right direction? > > In any case, thanks for your help ... > > Here is a driver source located in: linux/drivers/misc/xilinx_sdfec.c > > static long xsdfec_dev_ioctl(struct file *fptr, unsigned int cmd, > unsigned long data) > { > struct xsdfec_dev *xsdfec; > void __user *arg = NULL; > int rval = -EINVAL; > > if (_IOC_TYPE(cmd) != XSDFEC_MAGIC) > return -ENOTTY; > > /* check if ioctl argument is present and valid */ > if (_IOC_DIR(cmd) != _IOC_NONE) > { > arg = (void __user *)data; > if (!arg) > return rval; > } >
All of this can be removed, and replaced with unconditional
void __user *arg = (void __user *)data; int rval;
with an "rval = -ENOTTY" added in the 'default' case. This will make it behave more like other drivers, returning -ENOTTY for any unknown ioctl command, and returning -EFAULT for all invalid pointers, including NULL.
xsdfec_dev_compat_ioctl() can removed as well, with the file operations changed to an unconditional (removing the #ifdef)
.compat_ioctl = compat_ptr_ioctl(),
This will not affect behavior, it's just another simplification.
Arnd
| |