lkml.org 
[lkml]   [2019]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 18/43] compat_ioctl: move hci_sock handlers into driver
    Date
    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: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    ---
    fs/compat_ioctl.c | 24 ------------------------
    net/bluetooth/hci_sock.c | 21 ++++++++++++++++++++-
    2 files changed, 20 insertions(+), 25 deletions(-)

    diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
    index 8dbef92b10fd..9302157d1471 100644
    --- a/fs/compat_ioctl.c
    +++ b/fs/compat_ioctl.c
    @@ -40,9 +40,6 @@

    #include "internal.h"

    -#include <net/bluetooth/bluetooth.h>
    -#include <net/bluetooth/hci_sock.h>
    -
    #ifdef CONFIG_BLOCK
    #include <linux/cdrom.h>
    #include <linux/fd.h>
    @@ -646,27 +643,6 @@ COMPATIBLE_IOCTL(RNDADDENTROPY)
    COMPATIBLE_IOCTL(RNDZAPENTCNT)
    COMPATIBLE_IOCTL(RNDCLEARPOOL)
    /* Bluetooth */
    -COMPATIBLE_IOCTL(HCIDEVUP)
    -COMPATIBLE_IOCTL(HCIDEVDOWN)
    -COMPATIBLE_IOCTL(HCIDEVRESET)
    -COMPATIBLE_IOCTL(HCIDEVRESTAT)
    -COMPATIBLE_IOCTL(HCIGETDEVLIST)
    -COMPATIBLE_IOCTL(HCIGETDEVINFO)
    -COMPATIBLE_IOCTL(HCIGETCONNLIST)
    -COMPATIBLE_IOCTL(HCIGETCONNINFO)
    -COMPATIBLE_IOCTL(HCIGETAUTHINFO)
    -COMPATIBLE_IOCTL(HCISETRAW)
    -COMPATIBLE_IOCTL(HCISETSCAN)
    -COMPATIBLE_IOCTL(HCISETAUTH)
    -COMPATIBLE_IOCTL(HCISETENCRYPT)
    -COMPATIBLE_IOCTL(HCISETPTYPE)
    -COMPATIBLE_IOCTL(HCISETLINKPOL)
    -COMPATIBLE_IOCTL(HCISETLINKMODE)
    -COMPATIBLE_IOCTL(HCISETACLMTU)
    -COMPATIBLE_IOCTL(HCISETSCOMTU)
    -COMPATIBLE_IOCTL(HCIBLOCKADDR)
    -COMPATIBLE_IOCTL(HCIUNBLOCKADDR)
    -COMPATIBLE_IOCTL(HCIINQUIRY)
    COMPATIBLE_IOCTL(HCIUARTSETPROTO)
    COMPATIBLE_IOCTL(HCIUARTGETPROTO)
    COMPATIBLE_IOCTL(HCIUARTGETDEVICE)
    diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
    index d32077b28433..5d0ed28c0d3a 100644
    --- a/net/bluetooth/hci_sock.c
    +++ b/net/bluetooth/hci_sock.c
    @@ -23,7 +23,7 @@
    */

    /* Bluetooth HCI sockets. */
    -
    +#include <linux/compat.h>
    #include <linux/export.h>
    #include <linux/utsname.h>
    #include <linux/sched.h>
    @@ -1054,6 +1054,22 @@ static int hci_sock_ioctl(struct socket *sock, unsigned int cmd,
    return err;
    }

    +#ifdef CONFIG_COMPAT
    +static int hci_sock_compat_ioctl(struct socket *sock, unsigned int cmd,
    + unsigned long arg)
    +{
    + switch (cmd) {
    + case HCIDEVUP:
    + case HCIDEVDOWN:
    + case HCIDEVRESET:
    + case HCIDEVRESTAT:
    + return hci_sock_ioctl(sock, cmd, arg);
    + }
    +
    + return hci_sock_ioctl(sock, cmd, (unsigned long)compat_ptr(arg));
    +}
    +#endif
    +
    static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
    int addr_len)
    {
    @@ -1974,6 +1990,9 @@ static const struct proto_ops hci_sock_ops = {
    .sendmsg = hci_sock_sendmsg,
    .recvmsg = hci_sock_recvmsg,
    .ioctl = hci_sock_ioctl,
    +#ifdef CONFIG_COMPAT
    + .compat_ioctl = hci_sock_compat_ioctl,
    +#endif
    .poll = datagram_poll,
    .listen = sock_no_listen,
    .shutdown = sock_no_shutdown,
    --
    2.20.0
    \
     
     \ /
      Last update: 2019-10-09 21:15    [W:2.923 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site