ARM: 9300/1: Replace all non-returning strlcpy with strscpy
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Thu, 1 Jun 2023 08:34:26 +0000 (09:34 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 19 Jun 2023 08:35:49 +0000 (09:35 +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

[ardb: submitting to the patch tracker on behalf of Azeem]

Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/kernel/atags_parse.c
arch/arm/kernel/setup.c
arch/arm/kernel/vdso.c

index 373b61f..33f6eb5 100644 (file)
@@ -127,7 +127,7 @@ static int __init parse_tag_cmdline(const struct tag *tag)
 #elif defined(CONFIG_CMDLINE_FORCE)
        pr_warn("Ignoring tag cmdline (using the default kernel command line)\n");
 #else
-       strlcpy(default_command_line, tag->u.cmdline.cmdline,
+       strscpy(default_command_line, tag->u.cmdline.cmdline,
                COMMAND_LINE_SIZE);
 #endif
        return 0;
@@ -224,7 +224,7 @@ setup_machine_tags(void *atags_vaddr, unsigned int machine_nr)
        }
 
        /* parse_early_param needs a boot_command_line */
-       strlcpy(boot_command_line, from, COMMAND_LINE_SIZE);
+       strscpy(boot_command_line, from, COMMAND_LINE_SIZE);
 
        return mdesc;
 }
index 0a26585..a2f54ea 100644 (file)
@@ -1142,7 +1142,7 @@ void __init setup_arch(char **cmdline_p)
        setup_initial_init_mm(_text, _etext, _edata, _end);
 
        /* populate cmd_line too for later use, preserving boot_command_line */
-       strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);
+       strscpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);
        *cmdline_p = cmd_line;
 
        early_fixmap_init();
index 3408269..f297d66 100644 (file)
@@ -135,7 +135,7 @@ static Elf32_Sym * __init find_symbol(struct elfinfo *lib, const char *symname)
 
                if (lib->dynsym[i].st_name == 0)
                        continue;
-               strlcpy(name, lib->dynstr + lib->dynsym[i].st_name,
+               strscpy(name, lib->dynstr + lib->dynsym[i].st_name,
                        MAX_SYMNAME);
                c = strchr(name, '@');
                if (c)