lkml.org 
[lkml]   [2020]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [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

\
 
 \ /
  Last update: 2020-10-24 21:22    [W:0.073 / U:1.040 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site