leds: Replace all non-returning strlcpy with strscpy
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Tue, 23 May 2023 02:14:51 +0000 (02:14 +0000)
committerLee Jones <lee@kernel.org>
Thu, 25 May 2023 11:31:55 +0000 (12:31 +0100)
strlcpy() reads the entire source buffer first.
This read may exceed the destination size limit.
This is both inefficient and can lead to linear read
overflows if a source string is not NUL-terminated [1].
In an effort to remove strlcpy() completely [2], replace
strlcpy() here with strscpy().
No return values were used, so direct replacement is safe.

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89

Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20230523021451.2406362-1-azeemshaikh38@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/flash/leds-aat1290.c
drivers/leds/led-class.c
drivers/leds/leds-spi-byte.c

index 589484b22c796c81abc91c01dc7f8790dd3aa345..f12ecb2c658031d815e909a20579bbfb4fe07596 100644 (file)
@@ -425,7 +425,7 @@ static void aat1290_init_v4l2_flash_config(struct aat1290_led *led,
        struct led_classdev *led_cdev = &led->fled_cdev.led_cdev;
        struct led_flash_setting *s;
 
-       strlcpy(v4l2_sd_cfg->dev_name, led_cdev->dev->kobj.name,
+       strscpy(v4l2_sd_cfg->dev_name, led_cdev->dev->kobj.name,
                sizeof(v4l2_sd_cfg->dev_name));
 
        s = &v4l2_sd_cfg->intensity;
index 9255bc11f99d843981ff607ff1eaa364fe79aba0..6dae56b914fe3d0007d11cca51fc00e898b83455 100644 (file)
@@ -409,7 +409,7 @@ static int led_classdev_next_name(const char *init_name, char *name,
        int ret = 0;
        struct device *dev;
 
-       strlcpy(name, init_name, len);
+       strscpy(name, init_name, len);
 
        while ((ret < len) &&
               (dev = class_find_device_by_name(leds_class, name))) {
index 2bc5c99daf51a8c999d9694336a29cafba41a408..2c7ffc3c78e666ede757bd077ea0c798060d80a7 100644 (file)
@@ -98,7 +98,7 @@ static int spi_byte_probe(struct spi_device *spi)
                return -ENOMEM;
 
        of_property_read_string(child, "label", &name);
-       strlcpy(led->name, name, sizeof(led->name));
+       strscpy(led->name, name, sizeof(led->name));
        led->spi = spi;
        mutex_init(&led->mutex);
        led->cdef = device_get_match_data(dev);