compat_ioctl: move more drivers to compat_ptr_ioctl
authorArnd Bergmann <arnd@arndb.de>
Tue, 11 Sep 2018 19:59:08 +0000 (21:59 +0200)
committerArnd Bergmann <arnd@arndb.de>
Wed, 23 Oct 2019 15:23:44 +0000 (17:23 +0200)
The .ioctl and .compat_ioctl file operations have the same prototype so
they can both point to the same function, which works great almost all
the time when all the commands are compatible.

One exception is the s390 architecture, where a compat pointer is only
31 bit wide, and converting it into a 64-bit pointer requires calling
compat_ptr(). Most drivers here will never run in s390, but since we now
have a generic helper for it, it's easy enough to use it consistently.

I double-checked all these drivers to ensure that all ioctl arguments
are used as pointers or are ignored, but are not interpreted as integer
values.

Acked-by: Jason Gunthorpe <jgg@mellanox.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: David Sterba <dsterba@suse.com>
Acked-by: Darren Hart (VMware) <dvhart@infradead.org>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
33 files changed:
drivers/android/binder.c
drivers/crypto/qat/qat_common/adf_ctl_drv.c
drivers/dma-buf/dma-buf.c
drivers/dma-buf/sw_sync.c
drivers/dma-buf/sync_file.c
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
drivers/hid/hidraw.c
drivers/iio/industrialio-core.c
drivers/infiniband/core/uverbs_main.c
drivers/media/rc/lirc_dev.c
drivers/misc/vmw_vmci/vmci_host.c
drivers/nvdimm/bus.c
drivers/nvme/host/core.c
drivers/pci/switch/switchtec.c
drivers/platform/x86/wmi.c
drivers/rpmsg/rpmsg_char.c
drivers/sbus/char/display7seg.c
drivers/sbus/char/envctrl.c
drivers/scsi/3w-xxxx.c
drivers/scsi/cxlflash/main.c
drivers/scsi/esas2r/esas2r_main.c
drivers/scsi/pmcraid.c
drivers/staging/android/ion/ion.c
drivers/staging/vme/devices/vme_user.c
drivers/tee/tee_core.c
drivers/usb/class/cdc-wdm.c
drivers/usb/class/usbtmc.c
drivers/virt/fsl_hypervisor.c
fs/btrfs/super.c
fs/fuse/dev.c
fs/notify/fanotify/fanotify_user.c
fs/userfaultfd.c
net/rfkill/core.c

index c0a4912..c7079f0 100644 (file)
@@ -6063,7 +6063,7 @@ const struct file_operations binder_fops = {
        .owner = THIS_MODULE,
        .poll = binder_poll,
        .unlocked_ioctl = binder_ioctl,
-       .compat_ioctl = binder_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .mmap = binder_mmap,
        .open = binder_open,
        .flush = binder_flush,
index abc7a7f..ef0e482 100644 (file)
@@ -68,7 +68,7 @@ static long adf_ctl_ioctl(struct file *fp, unsigned int cmd, unsigned long arg);
 static const struct file_operations adf_ctl_ops = {
        .owner = THIS_MODULE,
        .unlocked_ioctl = adf_ctl_ioctl,
-       .compat_ioctl = adf_ctl_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 struct adf_ctl_drv_info {
index 433d91d..5b8797b 100644 (file)
@@ -415,9 +415,7 @@ static const struct file_operations dma_buf_fops = {
        .llseek         = dma_buf_llseek,
        .poll           = dma_buf_poll,
        .unlocked_ioctl = dma_buf_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = dma_buf_ioctl,
-#endif
+       .compat_ioctl   = compat_ptr_ioctl,
        .show_fdinfo    = dma_buf_show_fdinfo,
 };
 
index 6713cfb..348b3a9 100644 (file)
@@ -408,5 +408,5 @@ const struct file_operations sw_sync_debugfs_fops = {
        .open           = sw_sync_debugfs_open,
        .release        = sw_sync_debugfs_release,
        .unlocked_ioctl = sw_sync_ioctl,
-       .compat_ioctl   = sw_sync_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 };
index 25c5c07..76fb072 100644 (file)
@@ -480,5 +480,5 @@ static const struct file_operations sync_file_fops = {
        .release = sync_file_release,
        .poll = sync_file_poll,
        .unlocked_ioctl = sync_file_ioctl,
-       .compat_ioctl = sync_file_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
index 1d3cd5c..6283944 100644 (file)
@@ -49,7 +49,7 @@ static const char kfd_dev_name[] = "kfd";
 static const struct file_operations kfd_fops = {
        .owner = THIS_MODULE,
        .unlocked_ioctl = kfd_ioctl,
-       .compat_ioctl = kfd_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .open = kfd_open,
        .mmap = kfd_mmap,
 };
index bbc6ec1..a925f9f 100644 (file)
@@ -468,9 +468,7 @@ static const struct file_operations hidraw_ops = {
        .release =      hidraw_release,
        .unlocked_ioctl = hidraw_ioctl,
        .fasync =       hidraw_fasync,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = hidraw_ioctl,
-#endif
+       .compat_ioctl   = compat_ptr_ioctl,
        .llseek =       noop_llseek,
 };
 
index 524a686..9dd6875 100644 (file)
@@ -1610,7 +1610,7 @@ static const struct file_operations iio_buffer_fileops = {
        .owner = THIS_MODULE,
        .llseek = noop_llseek,
        .unlocked_ioctl = iio_ioctl,
-       .compat_ioctl = iio_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static int iio_check_unique_scan_index(struct iio_dev *indio_dev)
index db98111..c4c652e 100644 (file)
@@ -1139,7 +1139,7 @@ static const struct file_operations uverbs_fops = {
        .release = ib_uverbs_close,
        .llseek  = no_llseek,
        .unlocked_ioctl = ib_uverbs_ioctl,
-       .compat_ioctl = ib_uverbs_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static const struct file_operations uverbs_mmap_fops = {
@@ -1150,7 +1150,7 @@ static const struct file_operations uverbs_mmap_fops = {
        .release = ib_uverbs_close,
        .llseek  = no_llseek,
        .unlocked_ioctl = ib_uverbs_ioctl,
-       .compat_ioctl = ib_uverbs_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static int ib_uverbs_get_nl_info(struct ib_device *ibdev, void *client_data,
index f078f8a..9a8c1cf 100644 (file)
@@ -720,9 +720,7 @@ static const struct file_operations lirc_fops = {
        .owner          = THIS_MODULE,
        .write          = ir_lirc_transmit_ir,
        .unlocked_ioctl = ir_lirc_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = ir_lirc_ioctl,
-#endif
+       .compat_ioctl   = compat_ptr_ioctl,
        .read           = ir_lirc_read,
        .poll           = ir_lirc_poll,
        .open           = ir_lirc_open,
index 833e2bd..903e321 100644 (file)
@@ -961,7 +961,7 @@ static const struct file_operations vmuser_fops = {
        .release        = vmci_host_close,
        .poll           = vmci_host_poll,
        .unlocked_ioctl = vmci_host_unlocked_ioctl,
-       .compat_ioctl   = vmci_host_unlocked_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 };
 
 static struct miscdevice vmci_host_miscdev = {
index d47412d..38d41bb 100644 (file)
@@ -1227,7 +1227,7 @@ static const struct file_operations nvdimm_bus_fops = {
        .owner = THIS_MODULE,
        .open = nd_open,
        .unlocked_ioctl = bus_ioctl,
-       .compat_ioctl = bus_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .llseek = noop_llseek,
 };
 
@@ -1235,7 +1235,7 @@ static const struct file_operations nvdimm_fops = {
        .owner = THIS_MODULE,
        .open = nd_open,
        .unlocked_ioctl = dimm_ioctl,
-       .compat_ioctl = dimm_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .llseek = noop_llseek,
 };
 
index fd7dea3..522280e 100644 (file)
@@ -2947,7 +2947,7 @@ static const struct file_operations nvme_dev_fops = {
        .owner          = THIS_MODULE,
        .open           = nvme_dev_open,
        .unlocked_ioctl = nvme_dev_ioctl,
-       .compat_ioctl   = nvme_dev_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 };
 
 static ssize_t nvme_sysfs_reset(struct device *dev,
index 8c94cd3..66610f0 100644 (file)
@@ -1025,7 +1025,7 @@ static const struct file_operations switchtec_fops = {
        .read = switchtec_dev_read,
        .poll = switchtec_dev_poll,
        .unlocked_ioctl = switchtec_dev_ioctl,
-       .compat_ioctl = switchtec_dev_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static void link_event_work(struct work_struct *work)
index 59e9aa0..dc2e966 100644 (file)
@@ -911,7 +911,7 @@ static const struct file_operations wmi_fops = {
        .read           = wmi_char_read,
        .open           = wmi_char_open,
        .unlocked_ioctl = wmi_ioctl,
-       .compat_ioctl   = wmi_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 };
 
 static int wmi_dev_probe(struct device *dev)
index eea5ebb..507bfe1 100644 (file)
@@ -290,7 +290,7 @@ static const struct file_operations rpmsg_eptdev_fops = {
        .write_iter = rpmsg_eptdev_write_iter,
        .poll = rpmsg_eptdev_poll,
        .unlocked_ioctl = rpmsg_eptdev_ioctl,
-       .compat_ioctl = rpmsg_eptdev_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static ssize_t name_show(struct device *dev, struct device_attribute *attr,
@@ -451,7 +451,7 @@ static const struct file_operations rpmsg_ctrldev_fops = {
        .open = rpmsg_ctrldev_open,
        .release = rpmsg_ctrldev_release,
        .unlocked_ioctl = rpmsg_ctrldev_ioctl,
-       .compat_ioctl = rpmsg_ctrldev_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static void rpmsg_ctrldev_release_device(struct device *dev)
index 971fe07..fad936e 100644 (file)
@@ -156,7 +156,7 @@ static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 static const struct file_operations d7s_fops = {
        .owner =                THIS_MODULE,
        .unlocked_ioctl =       d7s_ioctl,
-       .compat_ioctl =         d7s_ioctl,
+       .compat_ioctl =         compat_ptr_ioctl,
        .open =                 d7s_open,
        .release =              d7s_release,
        .llseek = noop_llseek,
index a63d5e4..12d66aa 100644 (file)
@@ -715,9 +715,7 @@ static const struct file_operations envctrl_fops = {
        .owner =                THIS_MODULE,
        .read =                 envctrl_read,
        .unlocked_ioctl =       envctrl_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl =         envctrl_ioctl,
-#endif
+       .compat_ioctl =         compat_ptr_ioctl,
        .open =                 envctrl_open,
        .release =              envctrl_release,
        .llseek =               noop_llseek,
index 2b1e0d5..fb6444d 100644 (file)
@@ -1049,9 +1049,7 @@ static int tw_chrdev_open(struct inode *inode, struct file *file)
 static const struct file_operations tw_fops = {
        .owner          = THIS_MODULE,
        .unlocked_ioctl = tw_chrdev_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = tw_chrdev_ioctl,
-#endif
+       .compat_ioctl   = compat_ptr_ioctl,
        .open           = tw_chrdev_open,
        .release        = NULL,
        .llseek         = noop_llseek,
index 93ef97a..2dbf35f 100644 (file)
@@ -3593,7 +3593,7 @@ static const struct file_operations cxlflash_chr_fops = {
        .owner          = THIS_MODULE,
        .open           = cxlflash_chr_open,
        .unlocked_ioctl = cxlflash_chr_ioctl,
-       .compat_ioctl   = cxlflash_chr_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 };
 
 /**
index fdbda5c..80c5a23 100644 (file)
@@ -613,7 +613,7 @@ static int __init esas2r_init(void)
 
 /* Handle ioctl calls to "/proc/scsi/esas2r/ATTOnode" */
 static const struct file_operations esas2r_proc_fops = {
-       .compat_ioctl   = esas2r_proc_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
        .unlocked_ioctl = esas2r_proc_ioctl,
 };
 
index 398d2af..7eb88fe 100644 (file)
@@ -3973,9 +3973,7 @@ static const struct file_operations pmcraid_fops = {
        .open = pmcraid_chr_open,
        .fasync = pmcraid_chr_fasync,
        .unlocked_ioctl = pmcraid_chr_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl = pmcraid_chr_ioctl,
-#endif
+       .compat_ioctl = compat_ptr_ioctl,
        .llseek = noop_llseek,
 };
 
index e6b1ca1..c394686 100644 (file)
@@ -533,9 +533,7 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 static const struct file_operations ion_fops = {
        .owner          = THIS_MODULE,
        .unlocked_ioctl = ion_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = ion_ioctl,
-#endif
+       .compat_ioctl   = compat_ptr_ioctl,
 };
 
 static int debug_shrink_set(void *data, u64 val)
index 6a33aaa..fd0ea4d 100644 (file)
@@ -494,7 +494,7 @@ static const struct file_operations vme_user_fops = {
        .write = vme_user_write,
        .llseek = vme_user_llseek,
        .unlocked_ioctl = vme_user_unlocked_ioctl,
-       .compat_ioctl = vme_user_unlocked_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .mmap = vme_user_mmap,
 };
 
index 0f16d9f..37d22e3 100644 (file)
@@ -675,7 +675,7 @@ static const struct file_operations tee_fops = {
        .open = tee_open,
        .release = tee_release,
        .unlocked_ioctl = tee_ioctl,
-       .compat_ioctl = tee_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static void tee_release_device(struct device *dev)
index 70afb2c..e3db6fb 100644 (file)
@@ -734,7 +734,7 @@ static const struct file_operations wdm_fops = {
        .release =      wdm_release,
        .poll =         wdm_poll,
        .unlocked_ioctl = wdm_ioctl,
-       .compat_ioctl = wdm_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .llseek =       noop_llseek,
 };
 
index dcd7066..ffc9c6f 100644 (file)
@@ -2217,9 +2217,7 @@ static const struct file_operations fops = {
        .release        = usbtmc_release,
        .flush          = usbtmc_flush,
        .unlocked_ioctl = usbtmc_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl   = usbtmc_ioctl,
-#endif
+       .compat_ioctl   = compat_ptr_ioctl,
        .fasync         = usbtmc_fasync,
        .poll           = usbtmc_poll,
        .llseek         = default_llseek,
index 93d5beb..1b0b11b 100644 (file)
@@ -706,7 +706,7 @@ static const struct file_operations fsl_hv_fops = {
        .poll = fsl_hv_poll,
        .read = fsl_hv_read,
        .unlocked_ioctl = fsl_hv_ioctl,
-       .compat_ioctl = fsl_hv_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
 };
 
 static struct miscdevice fsl_hv_misc_dev = {
index 1b151af..d9ba089 100644 (file)
@@ -2297,7 +2297,7 @@ static const struct super_operations btrfs_super_ops = {
 static const struct file_operations btrfs_ctl_fops = {
        .open = btrfs_control_open,
        .unlocked_ioctl  = btrfs_control_ioctl,
-       .compat_ioctl = btrfs_control_ioctl,
+       .compat_ioctl = compat_ptr_ioctl,
        .owner   = THIS_MODULE,
        .llseek = noop_llseek,
 };
index dadd617..23b089e 100644 (file)
@@ -2260,7 +2260,7 @@ const struct file_operations fuse_dev_operations = {
        .release        = fuse_dev_release,
        .fasync         = fuse_dev_fasync,
        .unlocked_ioctl = fuse_dev_ioctl,
-       .compat_ioctl   = fuse_dev_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 };
 EXPORT_SYMBOL_GPL(fuse_dev_operations);
 
index 8508ab5..0aa362b 100644 (file)
@@ -523,7 +523,7 @@ static const struct file_operations fanotify_fops = {
        .fasync         = NULL,
        .release        = fanotify_release,
        .unlocked_ioctl = fanotify_ioctl,
-       .compat_ioctl   = fanotify_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
        .llseek         = noop_llseek,
 };
 
index f9fd186..d7f54e5 100644 (file)
@@ -1923,7 +1923,7 @@ static const struct file_operations userfaultfd_fops = {
        .poll           = userfaultfd_poll,
        .read           = userfaultfd_read,
        .unlocked_ioctl = userfaultfd_ioctl,
-       .compat_ioctl   = userfaultfd_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
        .llseek         = noop_llseek,
 };
 
index f9b08a6..c4be6a9 100644 (file)
@@ -1311,7 +1311,7 @@ static const struct file_operations rfkill_fops = {
        .release        = rfkill_fop_release,
 #ifdef CONFIG_RFKILL_INPUT
        .unlocked_ioctl = rfkill_fop_ioctl,
-       .compat_ioctl   = rfkill_fop_ioctl,
+       .compat_ioctl   = compat_ptr_ioctl,
 #endif
        .llseek         = no_llseek,
 };