Commit 761d8db7 authored by Todd Poynor's avatar Todd Poynor Committed by Greg Kroah-Hartman

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: default avatarDmitry Torokhov <dtor@chromium.org>
Signed-off-by: default avatarZhongze Hu <frankhu@chromium.org>
Signed-off-by: default avatarTodd Poynor <toddpoynor@google.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ed74277b
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "gasket_page_table.h" #include "gasket_page_table.h"
#include "gasket_sysfs.h" #include "gasket_sysfs.h"
#include <linux/compiler.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -1781,6 +1782,7 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg) ...@@ -1781,6 +1782,7 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg)
{ {
struct gasket_dev *gasket_dev; struct gasket_dev *gasket_dev;
const struct gasket_driver_desc *driver_desc; const struct gasket_driver_desc *driver_desc;
void __user *argp = (void __user *)arg;
char path[256]; char path[256];
if (!filp) if (!filp)
...@@ -1810,14 +1812,14 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg) ...@@ -1810,14 +1812,14 @@ static long gasket_ioctl(struct file *filp, uint cmd, ulong arg)
* check_and_invoke_callback. * check_and_invoke_callback.
*/ */
if (driver_desc->ioctl_handler_cb) 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_log_error(
gasket_dev, "Received unknown ioctl 0x%x", cmd); gasket_dev, "Received unknown ioctl 0x%x", cmd);
return -EINVAL; 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) int gasket_reset(struct gasket_dev *gasket_dev, uint reset_type)
......
...@@ -314,9 +314,12 @@ struct gasket_dev { ...@@ -314,9 +314,12 @@ struct gasket_dev {
struct hlist_node legacy_hlist_node; 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. */ /* Type of the ioctl permissions check callback. See below. */
typedef int (*gasket_ioctl_permissions_cb_t)( 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. * Device type descriptor.
...@@ -550,7 +553,7 @@ struct gasket_driver_desc { ...@@ -550,7 +553,7 @@ struct gasket_driver_desc {
* return -EINVAL. Should return an error status (either -EINVAL or * return -EINVAL. Should return an error status (either -EINVAL or
* the error result of the ioctl being handled). * 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. * device_status_cb: Callback to determine device health.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment