]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
gpiolib: cdev: replace strncpy() with strscpy()
authorKent Gibson <warthog618@gmail.com>
Mon, 28 Sep 2020 00:27:49 +0000 (08:27 +0800)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Wed, 30 Sep 2020 08:56:27 +0000 (10:56 +0200)
Replace usage of strncpy() with strscpy() to remove -Wstringop-truncation
warnings.

The structures being populated are zeroed, to prevent stack leakage as
they are returned to userspace, so strscpy() performs the equivalent
function without the warnings.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Kent Gibson <warthog618@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
drivers/gpio/gpiolib-cdev.c

index 81ce2020f17bcb73e4fac8f53065bc8bd6b50c35..86679397d09cc753cd3b3ff4c341e0ba121c208e 100644 (file)
@@ -752,6 +752,7 @@ static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
        bool ok_for_pinctrl;
        unsigned long flags;
 
+       memset(info, 0, sizeof(*info));
        info->line_offset = gpio_chip_hwgpio(desc);
 
        /*
@@ -766,19 +767,11 @@ static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
 
        spin_lock_irqsave(&gpio_lock, flags);
 
-       if (desc->name) {
-               strncpy(info->name, desc->name, sizeof(info->name));
-               info->name[sizeof(info->name) - 1] = '\0';
-       } else {
-               info->name[0] = '\0';
-       }
+       if (desc->name)
+               strscpy(info->name, desc->name, sizeof(info->name));
 
-       if (desc->label) {
-               strncpy(info->consumer, desc->label, sizeof(info->consumer));
-               info->consumer[sizeof(info->consumer) - 1] = '\0';
-       } else {
-               info->consumer[0] = '\0';
-       }
+       if (desc->label)
+               strscpy(info->consumer, desc->label, sizeof(info->consumer));
 
        /*
         * Userspace only need to know that the kernel is using this GPIO so
@@ -842,12 +835,10 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 
                memset(&chipinfo, 0, sizeof(chipinfo));
 
-               strncpy(chipinfo.name, dev_name(&gdev->dev),
+               strscpy(chipinfo.name, dev_name(&gdev->dev),
                        sizeof(chipinfo.name));
-               chipinfo.name[sizeof(chipinfo.name)-1] = '\0';
-               strncpy(chipinfo.label, gdev->label,
+               strscpy(chipinfo.label, gdev->label,
                        sizeof(chipinfo.label));
-               chipinfo.label[sizeof(chipinfo.label)-1] = '\0';
                chipinfo.lines = gdev->ngpio;
                if (copy_to_user(ip, &chipinfo, sizeof(chipinfo)))
                        return -EFAULT;