sparc64: Replace all non-returning strlcpy with strscpy
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Tue, 30 May 2023 16:30:01 +0000 (16:30 +0000)
committerKees Cook <keescook@chromium.org>
Wed, 14 Jun 2023 19:04:06 +0000 (12:04 -0700)
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>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20230530163001.985256-1-azeemshaikh38@gmail.com
arch/sparc/kernel/ioport.c
arch/sparc/kernel/setup_32.c
arch/sparc/kernel/setup_64.c
arch/sparc/prom/bootstr_32.c

index 4e4f3d3..a8cbe40 100644 (file)
@@ -191,7 +191,7 @@ static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys,
                tack += sizeof (struct resource);
        }
 
-       strlcpy(tack, name, XNMLN+1);
+       strscpy(tack, name, XNMLN+1);
        res->name = tack;
 
        va = _sparc_ioremap(res, busno, phys, size);
index c8e0dd9..ace0e9a 100644 (file)
@@ -302,7 +302,7 @@ void __init setup_arch(char **cmdline_p)
 
        /* Initialize PROM console and command line. */
        *cmdline_p = prom_getbootargs();
-       strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
+       strscpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
        parse_early_param();
 
        boot_flags_init(*cmdline_p);
index 48abee4..6546ca9 100644 (file)
@@ -636,7 +636,7 @@ void __init setup_arch(char **cmdline_p)
 {
        /* Initialize PROM console and command line. */
        *cmdline_p = prom_getbootargs();
-       strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
+       strscpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
        parse_early_param();
 
        boot_flags_init(*cmdline_p);
index e3b731f..1c7cd25 100644 (file)
@@ -52,7 +52,7 @@ prom_getbootargs(void)
                 * V3 PROM cannot supply as with more than 128 bytes
                 * of an argument. But a smart bootstrap loader can.
                 */
-               strlcpy(barg_buf, *romvec->pv_v2bootargs.bootargs, sizeof(barg_buf));
+               strscpy(barg_buf, *romvec->pv_v2bootargs.bootargs, sizeof(barg_buf));
                break;
        default:
                break;