Bluetooth: Re-use kstrtobool_from_user()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 29 May 2018 13:33:48 +0000 (16:33 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 30 May 2018 06:16:04 +0000 (08:16 +0200)
Re-use kstrtobool_from_user() instead of open coded variant.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_core.c
net/bluetooth/hci_debugfs.c
net/bluetooth/smp.c

index b0ee9ed..1dec337 100644 (file)
@@ -76,19 +76,15 @@ static ssize_t dut_mode_write(struct file *file, const char __user *user_buf,
 {
        struct hci_dev *hdev = file->private_data;
        struct sk_buff *skb;
-       char buf[32];
-       size_t buf_size = min(count, (sizeof(buf)-1));
        bool enable;
+       int err;
 
        if (!test_bit(HCI_UP, &hdev->flags))
                return -ENETDOWN;
 
-       if (copy_from_user(buf, user_buf, buf_size))
-               return -EFAULT;
-
-       buf[buf_size] = '\0';
-       if (strtobool(buf, &enable))
-               return -EINVAL;
+       err = kstrtobool_from_user(user_buf, count, &enable);
+       if (err)
+               return err;
 
        if (enable == hci_dev_test_flag(hdev, HCI_DUT_MODE))
                return -EALREADY;
@@ -135,17 +131,12 @@ static ssize_t vendor_diag_write(struct file *file, const char __user *user_buf,
                                 size_t count, loff_t *ppos)
 {
        struct hci_dev *hdev = file->private_data;
-       char buf[32];
-       size_t buf_size = min(count, (sizeof(buf)-1));
        bool enable;
        int err;
 
-       if (copy_from_user(buf, user_buf, buf_size))
-               return -EFAULT;
-
-       buf[buf_size] = '\0';
-       if (strtobool(buf, &enable))
-               return -EINVAL;
+       err = kstrtobool_from_user(user_buf, count, &enable);
+       if (err)
+               return err;
 
        /* When the diagnostic flags are not persistent and the transport
         * is not active or in user channel operation, then there is no need
index 418b76e..0d8ab5b 100644 (file)
@@ -47,19 +47,15 @@ static ssize_t __name ## _write(struct file *file,                        \
                                 size_t count, loff_t *ppos)                  \
 {                                                                            \
        struct hci_dev *hdev = file->private_data;                            \
-       char buf[32];                                                         \
-       size_t buf_size = min(count, (sizeof(buf) - 1));                      \
        bool enable;                                                          \
+       int err;                                                              \
                                                                              \
        if (test_bit(HCI_UP, &hdev->flags))                                   \
                return -EBUSY;                                                \
                                                                              \
-       if (copy_from_user(buf, user_buf, buf_size))                          \
-               return -EFAULT;                                               \
-                                                                             \
-       buf[buf_size] = '\0';                                                 \
-       if (strtobool(buf, &enable))                                          \
-               return -EINVAL;                                               \
+       err = kstrtobool_from_user(user_buf, count, &enable);                 \
+       if (err)                                                              \
+               return err;                                                   \
                                                                              \
        if (enable == test_bit(__quirk, &hdev->quirks))                       \
                return -EALREADY;                                             \
@@ -658,19 +654,15 @@ static ssize_t force_static_address_write(struct file *file,
                                          size_t count, loff_t *ppos)
 {
        struct hci_dev *hdev = file->private_data;
-       char buf[32];
-       size_t buf_size = min(count, (sizeof(buf)-1));
        bool enable;
+       int err;
 
        if (test_bit(HCI_UP, &hdev->flags))
                return -EBUSY;
 
-       if (copy_from_user(buf, user_buf, buf_size))
-               return -EFAULT;
-
-       buf[buf_size] = '\0';
-       if (strtobool(buf, &enable))
-               return -EINVAL;
+       err = kstrtobool_from_user(user_buf, count, &enable);
+       if (err)
+               return err;
 
        if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
                return -EALREADY;
index a2ddae2..ae91e2d 100644 (file)
@@ -3315,16 +3315,12 @@ static ssize_t force_bredr_smp_write(struct file *file,
                                     size_t count, loff_t *ppos)
 {
        struct hci_dev *hdev = file->private_data;
-       char buf[32];
-       size_t buf_size = min(count, (sizeof(buf)-1));
        bool enable;
+       int err;
 
-       if (copy_from_user(buf, user_buf, buf_size))
-               return -EFAULT;
-
-       buf[buf_size] = '\0';
-       if (strtobool(buf, &enable))
-               return -EINVAL;
+       err = kstrtobool_from_user(user_buf, count, &enable);
+       if (err)
+               return err;
 
        if (enable == hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
                return -EALREADY;