diff options
author | Todd Poynor <toddpoynor@google.com> | 2018-07-19 20:49:17 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-07-21 08:50:35 +0200 |
commit | 761d8db71436d8c67bcac85aa62860cb5848fecf (patch) | |
tree | 248c8c29e5bb83864ed5566bfbfccaeee0d2ab13 /drivers | |
parent | ed74277bd80a47ec552ccf3581583421c3a4df5d (diff) |
staging: gasket: top ioctl handler add __user annotations
Add __user annotation to gasket_core top-level ioctl handling pointer
arguments, for sparse checking.
Reported-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Zhongze Hu <frankhu@chromium.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/gasket/gasket_core.c | 6 | ||||
-rw-r--r-- | drivers/staging/gasket/gasket_core.h | 7 |
2 files changed, 9 insertions, 4 deletions
diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c index 254fb392c05c..40e46ca5228c 100644 --- a/drivers/staging/gasket/gasket_core.c +++ b/drivers/staging/gasket/gasket_core.c @@ -14,6 +14,7 @@ #include "gasket_page_table.h" #include "gasket_sysfs.h" +#include <linux/compiler.h> #include <linux/delay.h> #include <linux/fs.h> #include <linux/init.h> @@ -1781,6 +1782,7 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg) { struct gasket_dev *gasket_dev; const struct gasket_driver_desc *driver_desc; + void __user *argp = (void __user *)arg; char path[256]; if (!filp) @@ -1810,14 +1812,14 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg) * check_and_invoke_callback. */ if (driver_desc->ioctl_handler_cb) - return driver_desc->ioctl_handler_cb(filp, cmd, arg); + return driver_desc->ioctl_handler_cb(filp, cmd, argp); gasket_log_error( gasket_dev, "Received unknown ioctl 0x%x", cmd); return -EINVAL; } - return gasket_handle_ioctl(filp, cmd, arg); + return gasket_handle_ioctl(filp, cmd, argp); } int gasket_reset(struct gasket_dev *gasket_dev, uint reset_type) diff --git a/drivers/staging/gasket/gasket_core.h b/drivers/staging/gasket/gasket_core.h index 7ea1df123ba5..bf4ed3769efb 100644 --- a/drivers/staging/gasket/gasket_core.h +++ b/drivers/staging/gasket/gasket_core.h @@ -314,9 +314,12 @@ struct gasket_dev { struct hlist_node legacy_hlist_node; }; +/* Type of the ioctl handler callback. */ +typedef long (*gasket_ioctl_handler_cb_t) + (struct file *file, uint cmd, void __user *argp); /* Type of the ioctl permissions check callback. See below. */ typedef int (*gasket_ioctl_permissions_cb_t)( - struct file *filp, uint cmd, ulong arg); + struct file *filp, uint cmd, void __user *argp); /* * Device type descriptor. @@ -550,7 +553,7 @@ struct gasket_driver_desc { * return -EINVAL. Should return an error status (either -EINVAL or * the error result of the ioctl being handled). */ - long (*ioctl_handler_cb)(struct file *filp, uint cmd, ulong arg); + gasket_ioctl_handler_cb_t ioctl_handler_cb; /* * device_status_cb: Callback to determine device health. |