1. 23 Oct, 2019 40 commits
    • Arnd Bergmann's avatar
      pktcdvd: add compat_ioctl handler · 1b114b08
      Arnd Bergmann authored
      pkt_ioctl() implements the generic SCSI_IOCTL_SEND_COMMAND
      and some cdrom ioctls by forwarding to the underlying block
      device. For compat_ioctl handling, this always takes a
      roundtrip through fs/compat_ioctl.c that we should try
      to avoid, at least for the compatible commands.
      
      CDROM_SEND_PACKET is an exception here, it requires special
      translation in compat_blkdev_driver_ioctl().
      
      CDROM_LAST_WRITTEN has no compat handling at the moment.
      
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: linux-block@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      1b114b08
    • Arnd Bergmann's avatar
      compat_ioctl: move SG_GET_REQUEST_TABLE handling · fd6c3d5a
      Arnd Bergmann authored
      SG_GET_REQUEST_TABLE is now the last ioctl command that needs a conversion
      handler. This is only used in a single file, so the implementation should
      be there.
      
      I'm trying to simplify it in the process, to get rid of
      the compat_alloc_user_space() and extra copy, by adding a
      put_compat_request_table() function instead, which copies the data in
      the right format to user space.
      
      Cc: linux-scsi@vger.kernel.org
      Cc: Doug Gilbert <dgilbert@interlog.com>
      Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
      Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      fd6c3d5a
    • Arnd Bergmann's avatar
      compat_ioctl: ppp: move simple commands into ppp_generic.c · 8f5d9f2c
      Arnd Bergmann authored
      All ppp commands that are not already handled in ppp_compat_ioctl()
      are compatible, so they can now handled by calling the native
      ppp_ioctl() directly.
      
      Without CONFIG_BLOCK, the generic compat_ioctl table is now empty,
      so add a check to avoid a build failure in the looking function for
      that configuration.
      
      Cc: netdev@vger.kernel.org
      Cc: linux-ppp@vger.kernel.org
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      8f5d9f2c
    • Arnd Bergmann's avatar
      compat_ioctl: handle PPPIOCGIDLE for 64-bit time_t · 17c7e7f4
      Arnd Bergmann authored
      The ppp_idle structure is defined in terms of __kernel_time_t, which is
      defined as 'long' on all architectures, and this usage is not affected
      by the y2038 problem since it transports a time interval rather than an
      absolute time.
      
      However, the ppp user space defines the same structure as time_t, which
      may be 64-bit wide on new libc versions even on 32-bit architectures.
      
      It's easy enough to just handle both possible structure layouts on
      all architectures, to deal with the possibility that a user space ppp
      implementation comes with its own ppp_idle structure definition, as well
      as to document the fact that the driver is y2038-safe.
      
      Doing this also avoids the need for a special compat mode translation,
      since 32-bit and 64-bit kernels now support the same interfaces.  The old
      32-bit structure is also available on native 64-bit architectures now,
      but this is harmless.
      
      Cc: netdev@vger.kernel.org
      Cc: linux-ppp@vger.kernel.org
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      17c7e7f4
    • Al Viro's avatar
      compat_ioctl: move PPPIOCSCOMPRESS to ppp_generic · 5b6c02df
      Al Viro authored
      Rather than using a compat_alloc_user_space() buffer, moving
      this next to the native handler allows sharing most of
      the code, leaving only the user copy portion distinct.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Cc: netdev@vger.kernel.org
      Cc: linux-ppp@vger.kernel.org
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      5b6c02df
    • Al Viro's avatar
      compat_ioctl: unify copy-in of ppp filters · 3e859adf
      Al Viro authored
      Now that isdn4linux is gone, the is only one implementation of PPPIOCSPASS
      and PPPIOCSACTIVE in ppp_generic.c, so this is where the compat_ioctl
      support should be implemented.
      
      The two commands are implemented in very similar ways, so introduce
      new helpers to allow sharing between the two and between native and
      compat mode.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      [arnd: rebased, and added changelog text]
      Cc: netdev@vger.kernel.org
      Cc: linux-ppp@vger.kernel.org
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      3e859adf
    • Arnd Bergmann's avatar
      tty: handle compat PPP ioctls · b7aff093
      Arnd Bergmann authored
      Multiple tty devices are have tty devices that handle the
      PPPIOCGUNIT and PPPIOCGCHAN ioctls. To avoid adding a compat_ioctl
      handler to each of those, add it directly in tty_compat_ioctl
      so we can remove the calls from fs/compat_ioctl.c.
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      b7aff093
    • Arnd Bergmann's avatar
      compat_ioctl: move SIOCOUTQ out of compat_ioctl.c · c7dc504e
      Arnd Bergmann authored
      All users of this call are in socket or tty code, so handling
      it there means we can avoid the table entry in fs/compat_ioctl.c.
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: netdev@vger.kernel.org
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      c7dc504e
    • Arnd Bergmann's avatar
      compat_ioctl: handle SIOCOUTQNSD · 9d7bf41f
      Arnd Bergmann authored
      Unlike the normal SIOCOUTQ, SIOCOUTQNSD was never handled in compat
      mode. Add it to the common socket compat handler along with similar
      ones.
      
      Fixes: 2f4e1b39 ("tcp: ioctl type SIOCOUTQNSD returns amount of data not sent")
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: netdev@vger.kernel.org
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      9d7bf41f
    • Arnd Bergmann's avatar
      af_unix: add compat_ioctl support · 5f6beb9e
      Arnd Bergmann authored
      The af_unix protocol family has a custom ioctl command (inexplicibly
      based on SIOCPROTOPRIVATE), but never had a compat_ioctl handler for
      32-bit applications.
      
      Since all commands are compatible here, add a trivial wrapper that
      performs the compat_ptr() conversion for SIOCOUTQ/SIOCINQ.  SIOCUNIXFILE
      does not use the argument, but it doesn't hurt to also use compat_ptr()
      here.
      
      Fixes: ba94f308 ("unix: add ioctl to open a unix socket file with O_PATH")
      Cc: netdev@vger.kernel.org
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Eric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      5f6beb9e
    • Arnd Bergmann's avatar
      compat_ioctl: reimplement SG_IO handling · 98aaaec4
      Arnd Bergmann authored
      There are two code locations that implement the SG_IO ioctl: the old
      sg.c driver, and the generic scsi_ioctl helper that is in turn used by
      multiple drivers.
      
      To eradicate the old compat_ioctl conversion handler for the SG_IO
      command, I implement a readable pair of put_sg_io_hdr() /get_sg_io_hdr()
      helper functions that can be used for both compat and native mode,
      and then I call this from both drivers.
      
      For the iovec handling, there is already a compat_import_iovec() function
      that can simply be called in place of import_iovec().
      
      To avoid having to pass the compat/native state through multiple
      indirections, I mark the SG_IO command itself as compatible in
      fs/compat_ioctl.c and use in_compat_syscall() to figure out where
      we are called from.
      
      As a side-effect of this, the sg.c driver now also accepts the 32-bit
      sg_io_hdr format in compat mode using the read/write interface, not
      just ioctl. This should improve compatiblity with old 32-bit binaries,
      but it would break if any application intentionally passes the 64-bit
      data structure in compat mode here.
      
      Steffen Maier helped debug an issue in an earlier version of this patch.
      
      Cc: Steffen Maier <maier@linux.ibm.com>
      Cc: linux-scsi@vger.kernel.org
      Cc: Doug Gilbert <dgilbert@interlog.com>
      Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
      Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      98aaaec4
    • Arnd Bergmann's avatar
      compat_ioctl: move WDIOC handling into wdt drivers · b6dfb247
      Arnd Bergmann authored
      All watchdog drivers implement the same set of ioctl commands, and
      fortunately all of them are compatible between 32-bit and 64-bit
      architectures.
      
      Modern drivers always go through drivers/watchdog/wdt.c as an abstraction
      layer, but older ones implement their own file_operations on a character
      device for this.
      
      Move the handling from fs/compat_ioctl.c into the individual drivers.
      
      Note that most of the legacy drivers will never be used on 64-bit
      hardware, because they are for an old 32-bit SoC implementation, but
      doing them all at once is safer than trying to guess which ones do
      or do not need the compat_ioctl handling.
      Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      b6dfb247
    • Arnd Bergmann's avatar
      fs: compat_ioctl: move FITRIM emulation into file systems · 314999dc
      Arnd Bergmann authored
      Remove the special case for FITRIM, and make file systems
      handle that like all other ioctl commands with their own
      handlers.
      
      Cc: linux-ext4@vger.kernel.org
      Cc: linux-f2fs-devel@lists.sourceforge.net
      Cc: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
      Cc: linux-nilfs@vger.kernel.org
      Cc: ocfs2-devel@oss.oracle.com
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      314999dc
    • Arnd Bergmann's avatar
      gfs2: add compat_ioctl support · 8d098070
      Arnd Bergmann authored
      Out of the four ioctl commands supported on gfs2, only FITRIM
      works in compat mode.
      
      Add a proper handler based on the ext4 implementation.
      
      Fixes: 6ddc5c3d ("gfs2: getlabel support")
      Reviewed-by: default avatarBob Peterson <rpeterso@redhat.com>
      Cc: Andreas Gruenbacher <agruenba@redhat.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      8d098070
    • Arnd Bergmann's avatar
      compat_ioctl: remove unused convert_in_user macro · 0581f186
      Arnd Bergmann authored
      The last users are all gone, so let's remove the macro as well.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      0581f186
    • Arnd Bergmann's avatar
      compat_ioctl: remove last RAID handling code · caca7d10
      Arnd Bergmann authored
      Commit aa98aa31 ("md: move compat_ioctl handling into md.c")
      already removed the COMPATIBLE_IOCTL() table entries and added
      a complete implementation, but a few lines got left behind and
      should also be removed here.
      
      Cc: linux-raid@vger.kernel.org
      Cc: Song Liu <song@kernel.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      caca7d10
    • Arnd Bergmann's avatar
      compat_ioctl: remove /dev/raw ioctl translation · 50a2e74b
      Arnd Bergmann authored
      The /dev/rawX implementation already handles these just fine, so
      the entries in the table are not needed any more.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      50a2e74b
    • Arnd Bergmann's avatar
      compat_ioctl: remove PCI ioctl translation · a92d4f10
      Arnd Bergmann authored
      The /proc/pci/ implementation already handles these just fine, so
      the entries in the table are not needed any more.
      
      Cc: linux-pci@vger.kernel.org
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      a92d4f10
    • Arnd Bergmann's avatar
      compat_ioctl: remove joystick ioctl translation · aca94226
      Arnd Bergmann authored
      The joystick driver already handles these just fine, so
      the entries in the table are not needed any more.
      
      Cc: linux-input@vger.kernel.org
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      aca94226
    • Arnd Bergmann's avatar
      compat_ioctl: remove /dev/random commands · 507e4e2b
      Arnd Bergmann authored
      These are all handled by the random driver, so instead of listing
      each ioctl, we can use the generic compat_ptr_ioctl() helper.
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      507e4e2b
    • Arnd Bergmann's avatar
      compat_ioctl: remove IGNORE_IOCTL() · eede0b85
      Arnd Bergmann authored
      Since commit 07d106d0 ("vfs: fix up ENOIOCTLCMD error handling"),
      we don't warn about unhandled compat-ioctl command code any more, but
      just return the same error that a native file descriptor returns when
      there is no handler.
      
      This means the IGNORE_IOCTL() annotations are completely useless and
      can all be removed. TIOCSTART/TIOCSTOP and KDGHWCLK/KDSHWCLK fall into
      the same category, but for some reason were listed as COMPATIBLE_IOCTL().
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      eede0b85
    • Arnd Bergmann's avatar
      compat_ioctl: remove translation for sound ioctls · 2022ca0a
      Arnd Bergmann authored
      The SNDCTL_* and SOUND_* commands are the old OSS user interface.
      
      I checked all the sound ioctl commands listed in fs/compat_ioctl.c
      to see if we still need the translation handlers. Here is what I
      found:
      
      - sound/oss/ is (almost) gone from the kernel, this is what actually
        needed all the translations
      - The ALSA emulation for OSS correctly handles all compat_ioctl
        commands already.
      - sound/oss/dmasound/ is the last holdout of the original OSS code,
        this is only used on arch/m68k, which has no 64-bit mode and
        hence needs no compat handlers
      - arch/um/drivers/hostaudio_kern.c may run in 64-bit mode with
        32-bit x86 user space underneath it. This rare corner case is
        the only one that still needs the compat handlers.
      
      By adding a simple redirect of .compat_ioctl to .unlocked_ioctl in the
      UML driver, we can remove all the COMPATIBLE_IOCTL() annotations without
      a change in functionality. For completeness, I'm adding the same thing
      to the dmasound file, knowing that it makes no difference.
      
      The compat_ioctl list contains one comment about SNDCTL_DSP_MAPINBUF and
      SNDCTL_DSP_MAPOUTBUF, which actually would need a translation handler
      if implemented. However, the native implementation just returns -EINVAL,
      so we don't care.
      Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      2022ca0a
    • Arnd Bergmann's avatar
      compat_ioctl: remove HIDIO translation · 54b5b60a
      Arnd Bergmann authored
      The two drivers implementing these both gained proper compat_ioctl()
      handlers a long time ago with commits bb6c8d8f ("HID: hiddev:
      Add 32bit ioctl compatibilty") and ae5e49c7 ("HID: hidraw: add
      compatibility ioctl() for 32-bit applications."), so the lists in
      fs/compat_ioctl.c are no longer used.
      
      It appears that the lists were also incomplete, so the translation
      didn't actually work correctly when it was still in use.
      
      Remove them as cleanup.
      
      Cc: linux-bluetooth@vger.kernel.org
      Cc: Marcel Holtmann <marcel@holtmann.org>
      Cc: Johan Hedberg <johan.hedberg@gmail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      54b5b60a
    • Arnd Bergmann's avatar
      compat_ioctl: remove HCIUART handling · 61798109
      Arnd Bergmann authored
      As of commit f0193d3e ("change semantics of ldisc ->compat_ioctl()"),
      all hciuart ioctl commands are handled correctly in the driver, and we
      never need to go through the table here.
      
      Cc: linux-bluetooth@vger.kernel.org
      Cc: Marcel Holtmann <marcel@holtmann.org>
      Cc: Johan Hedberg <johan.hedberg@gmail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      61798109
    • Arnd Bergmann's avatar
      compat_ioctl: move hci_sock handlers into driver · 7a6038b3
      Arnd Bergmann authored
      All these ioctl commands are compatible, so we can handle
      them with a trivial wrapper in hci_sock.c and remove
      the listing in fs/compat_ioctl.c.
      
      A few of the commands pass integer arguments instead of
      pointers, so for correctness skip the compat_ptr() conversion
      here.
      Acked-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      7a6038b3
    • Arnd Bergmann's avatar
      compat_ioctl: move rfcomm handlers into driver · 7d60a7a6
      Arnd Bergmann authored
      All these ioctl commands are compatible, so we can handle
      them with a trivial wrapper in rfcomm/sock.c and remove
      the listing in fs/compat_ioctl.c.
      Acked-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      7d60a7a6
    • Arnd Bergmann's avatar
      compat_ioctl: move isdn/capi ioctl translation into driver · 5565a3ca
      Arnd Bergmann authored
      Neither the old isdn4linux interface nor the newer mISDN stack
      ever had working 32-bit compat mode as far as I can tell.
      
      However, the CAPI stack has some ioctl commands that are
      correctly listed in fs/compat_ioctl.c.
      
      We can trivially move all of those into the corresponding
      file that implement the native handlers by adding a compat_ioctl
      redirect to that.
      
      I did notice that treating CAPI_MANUFACTURER_CMD() as compatible
      is broken, so I'm also adding a handler for that, realizing that
      in all likelyhood, nobody is ever going to call it.
      
      Cc: Karsten Keil <isdn@linux-pingi.de>
      Cc: netdev@vger.kernel.org
      Cc: isdn4linux@listserv.isdn4linux.de
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      5565a3ca
    • Arnd Bergmann's avatar
      compat_ioctl: move ATYFB_CLK handling to atyfb driver · 0ba9841a
      Arnd Bergmann authored
      These are two obscure ioctl commands, in a driver that only
      has compatible commands, so just let the driver handle this
      itself.
      Acked-by: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      0ba9841a
    • Arnd Bergmann's avatar
      compat_ioctl: move tape handling into drivers · 1207045d
      Arnd Bergmann authored
      MTIOCPOS and MTIOCGET are incompatible between 32-bit and 64-bit user
      space, and traditionally have been translated in fs/compat_ioctl.c.
      
      To get rid of that translation handler, move a corresponding
      implementation into each of the four drivers implementing those commands.
      
      The interesting part of that is now in a new linux/mtio.h header that
      wraps the existing uapi/linux/mtio.h header and provides an abstraction
      to let drivers handle both cases easily. Using an in_compat_syscall()
      check, the caller does not have to keep track of whether this was
      called through .unlocked_ioctl() or .compat_ioctl().
      Acked-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Cc: "Kai Mäkisara" <Kai.Makisara@kolumbus.fi>
      Cc: linux-scsi@vger.kernel.org
      Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
      Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      1207045d
    • Arnd Bergmann's avatar
      compat_ioctl: use correct compat_ptr() translation in drivers · 01b8bca8
      Arnd Bergmann authored
      A handful of drivers all have a trivial wrapper around their ioctl
      handler, but don't call the compat_ptr() conversion function at the
      moment. In practice this does not matter, since none of them are used
      on the s390 architecture and for all other architectures, compat_ptr()
      does not do anything, but using the new compat_ptr_ioctl()
      helper makes it more correct in theory, and simplifies the code.
      
      I checked that all ioctl handlers in these files are compatible
      and take either pointer arguments or no argument.
      Acked-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: default avatarAndrew Donnellan <andrew.donnellan@au1.ibm.com>
      Acked-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      01b8bca8
    • Arnd Bergmann's avatar
      compat_ioctl: move more drivers to compat_ptr_ioctl · 1832f2d8
      Arnd Bergmann authored
      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: default avatarJason Gunthorpe <jgg@mellanox.com>
      Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Acked-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: default avatarDavid Sterba <dsterba@suse.com>
      Acked-by: default avatarDarren Hart (VMware) <dvhart@infradead.org>
      Acked-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Acked-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Acked-by: default avatarDan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      1832f2d8
    • Arnd Bergmann's avatar
      compat_ioctl: move drivers to compat_ptr_ioctl · 407e9ef7
      Arnd Bergmann authored
      Each of these drivers has a copy of the same trivial helper function to
      convert the pointer argument and then call the native ioctl handler.
      
      We now have a generic implementation of that, so use it.
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
      Acked-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      Reviewed-by: default avatarJason Gunthorpe <jgg@mellanox.com>
      Reviewed-by: default avatarJiri Kosina <jkosina@suse.cz>
      Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      407e9ef7
    • Arnd Bergmann's avatar
      compat_ioctl: move rtc handling into drivers/rtc/dev.c · 076ff658
      Arnd Bergmann authored
      We no longer need the rtc compat handling to be in common code, now that
      all drivers are either moved to the rtc-class framework, or (rarely)
      exist in drivers/char for architectures without compat mode (m68k,
      alpha and ia64, respectively).
      
      I checked the list of ioctl commands in drivers, and the ones that are
      not already handled are all compatible, again with the one exception of
      m68k driver, which implements RTC_PLL_GET and RTC_PLL_SET, but has no
      compat mode.
      
      Unlike earlier versions of this patch, I'm now adding a separate
      compat_ioctl handler that takes care of RTC_IRQP_READ32/RTC_IRQP_SET32
      and treats all other commands as compatible, leaving the native
      behavior unchanged.
      
      The old conversion handler also deals with RTC_EPOCH_READ and
      RTC_EPOCH_SET, which are not handled in rtc-dev.c but only in a single
      device driver (rtc-vr41xx), so I'm adding the compat version in the same
      place. I don't expect other drivers to need those commands in the future.
      Acked-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Reviewed-by: default avatarBen Hutchings <ben.hutchings@codethink.co.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      ---
      v4: handle RTC_EPOCH_SET32 in rtc_dev_compat_ioctl
      v3: handle RTC_IRQP_READ32/RTC_IRQP_SET32 in rtc_dev_compat_ioctl
      v2: merge compat handler into ioctl function to avoid the
          compat_alloc_user_space() roundtrip, based on feedback
          from Al Viro.
      076ff658
    • Arnd Bergmann's avatar
      ceph: fix compat_ioctl for ceph_dir_operations · 18bd6caa
      Arnd Bergmann authored
      The ceph_ioctl function is used both for files and directories, but only
      the files support doing that in 32-bit compat mode.
      
      On the s390 architecture, there is also a problem with invalid 31-bit
      pointers that need to be passed through compat_ptr().
      
      Use the new compat_ptr_ioctl() to address both issues.
      
      Note: When backporting this patch to stable kernels, "compat_ioctl:
      add compat_ptr_ioctl()" is needed as well.
      Reviewed-by: default avatar"Yan, Zheng" <zyan@redhat.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      18bd6caa
    • Al Viro's avatar
      compat_sys_ioctl(): make parallel to do_vfs_ioctl() · 37ecf8b2
      Al Viro authored
      Handle ioctls that might be handled without reaching ->ioctl() in
      native case on the top level there.  The counterpart of vfs_ioctl()
      (i.e. calling ->unlock_ioctl(), etc.) left as-is; eventually
      that would turn simply into the call of ->compat_ioctl(), but
      that'll take more work.  Once that is done, we can move the
      remains of compat_sys_ioctl() into fs/ioctl.c and finally bury
      fs/compat_ioctl.c.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      37ecf8b2
    • Al Viro's avatar
      compat: move FS_IOC_RESVSP_32 handling to fs/ioctl.c · 011da44b
      Al Viro authored
      ... and lose the ridiculous games with compat_alloc_user_space()
      there.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      011da44b
    • Al Viro's avatar
      do_vfs_ioctl(): use saner types · 34d3d0e6
      Al Viro authored
      casting to pointer to int, only to pass that to function that
      takes pointer to void and uses it as pointer to structure is
      really asking for trouble.
      
      "Some pointer, I'm not sure what to" is spelled "void *",
      not "int *"; use that.
      
      And declare the functions we are passing that pointer to
      as taking the pointer to what they really want to access.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      34d3d0e6
    • Al Viro's avatar
      compat: itanic doesn't have one · bf0a199b
      Al Viro authored
      ... and hadn't for a long time.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      bf0a199b
    • Al Viro's avatar
      FIGETBSZ: fix compat · ee26025f
      Al Viro authored
      it takes a pointer argument, regular file or no regular file
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      ee26025f
    • Al Viro's avatar
      fix compat handling of FICLONERANGE, FIDEDUPERANGE and FS_IOC_FIEMAP · 6b2daec1
      Al Viro authored
      Unlike FICLONE, all of those take a pointer argument; they do need
      compat_ptr() applied to arg.
      
      Fixes: d79bdd52 ("vfs: wire up compat ioctl for CLONE/CLONE_RANGE")
      Fixes: 54dbc151 ("vfs: hoist the btrfs deduplication ioctl to the vfs")
      Fixes: ceac204e ("fs: make fiemap work from compat_ioctl")
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      6b2daec1