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 c0a491277acac5a6310d537de3af555f8ff71579..c7079f071e23f1687ecd03ca4d29dbc85e63a6e6 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 abc7a7f64d645237b66376cbe0c8f1b8301e3be6..ef0e482ee04f0bf8dad3fc0b5654780736b03667 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 433d91d710e4e3f7158ef40950a64c57c951b672..5b8797be80dfb212316cf4b375ee9491a25669c4 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 6713cfb1995c6600b28a6ec9c9ddaa025838b888..348b3a9170fa4ae1a98d57e7351a5eb8f15a65fc 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 25c5c071645bda31f47e1dd9155ab9a763933b2b..76fb072c22dc403ef5bb34c37472bd3fc1533415 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 1d3cd5c50d5f2b06191e5bf8ff1fee7bed7a6225..6283944387d6fee1cc2b00d3d8e3680a98930fa0 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 bbc6ec1aa5cb13eb4a856972a2d22739b78cc846..a925f9fa70118b869f3e74418a0d02f5b44f10fa 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 524a686077ca6d3f3b0765e8cf0c0b96d0bcf6af..9dd687534035cfac988821e360c60139e65a0440 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 db98111b47f42764780172f9deb36237e882da73..c4c652e870444020f8b9658e21ecad0e362f9a94 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 f078f8a3aec88f464d7524bd939341fc60b64e6e..9a8c1cf54ac4a9740d9841b7ca83e266a94dc981 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 833e2bd248a57344f310696b5b352c4a48232716..903e321e8e87f3182603c30eda46709516cad1c0 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 d47412dcdf38dabad1384e74951b008745e3aa7c..38d41bbf178ae2dcd6bc8417f6f7857eb220803e 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 fd7dea36c3b6832c31aa63ba74b1bb68fa09a376..522280eb41152ea9ccf1c376843fbac05f2d7bbc 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 8c94cd3fd1f2148cf39f48c540db87122f3f11fb..66610f04d76d834dcb60b3e02d950b6ea8d0810b 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 59e9aa0f96436935f4360922d2c242244e0ca3d6..dc2e966a5c25425b4c4fb11e1cc7ce49bcfce6e3 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 eea5ebbb5119a85eb12b1ca550ea93b75ed88c8f..507bfe163883569199e0bac507279c76d6618554 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 971fe074d7c9acf8af14099704af55f22deb2076..fad936eb845fc7db080c33f7732ccb189b39baa8 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 a63d5e402ff214825907c3b57c45146bfbed6af6..12d66aa61ede586d08c71601926809447dd5a096 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 2b1e0d5030201c4bb4538d8d84569b17c99cde9d..fb6444d0409cfeaad58433fe1d34f0bd865bdb9e 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 93ef97af22df4dd13b472fdb5f65321a9b93653b..2dbf35f827872f6d6114abb569a497088881dbbd 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 fdbda5c05aa039276bedef439d8714beacc166f1..80c5a235d193c44d826715b11350daf2973a3e67 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 398d2af60832cf14f4a64d75e1c172743410ee63..7eb88fe1eb0bc988589470251785f4a2d7023617 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 e6b1ca141b930cc766338c17da3811ee7d2f8c5b..c394686a8e7de570841e50c9bd6db6b9ef5450c0 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 6a33aaa1a49fb4449be761912107f628b7a8fce4..fd0ea4dbcb9152ebe866400d5a6c2e537a466bf4 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 0f16d9ffd8d12ee024a92f9eff1b926fb8819fc4..37d22e39fd8d21ea282f8cdf17da1dd5775b6ecb 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 70afb2ca1eabde070ff163ce7dd96fce5da93f71..e3db6fbeadef84214c3ba91666a21dc33ff3aecb 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 dcd7066ffba228f9fee8e318f888c21d36b9d8eb..ffc9c6fdd7e1d64126e88cad23c2954218c5f2c1 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 93d5bebf9572a4892c3375f592812eb81b9caf58..1b0b11b55d2a068a675c9a152d83feb6f787970a 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 1b151af2577288055d1743b23732294bf2864d13..d9ba089a4973717c49d065332cf0e7b54bf72d2e 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 dadd617d826c93825500679f33a524940c15c2e7..23b089e6880a61d936053ea40e340668d285ac6b 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 8508ab575017487bd9c6f74962de06380c84966f..0aa362b885507a01607a1cef802f9f620f07284d 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 f9fd18670e22dfb3b9608007c93b9bff6353e245..d7f54e535294b725db8f02c514bd8b8be81576a5 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 f9b08a6d8dbe4064f94e59e10441b21ad2621521..c4be6a94ba97993d68fe562cf4c7a4f7282ededc 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,
 };