staging: gasket: top ioctl handler add __user annotations
authorTodd Poynor <toddpoynor@google.com>
Fri, 20 Jul 2018 03:49:17 +0000 (20:49 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Jul 2018 06:50:35 +0000 (08:50 +0200)
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>
drivers/staging/gasket/gasket_core.c
drivers/staging/gasket/gasket_core.h

index 254fb392c05c18ab9f822c98eb873cce6cca596e..40e46ca5228c8fce50069c36e63155072d9dd121 100644 (file)
@@ -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)
index 7ea1df123ba5d890856f4b13251a2dac58053bf0..bf4ed3769efb2b1960c1db4ab392a2231d53ed30 100644 (file)
@@ -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.