nios2: Replace all non-returning strlcpy with strscpy
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Tue, 30 May 2023 16:23:58 +0000 (16:23 +0000)
committerDinh Nguyen <dinguyen@kernel.org>
Tue, 13 Jun 2023 21:51:49 +0000 (16:51 -0500)
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

Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
arch/nios2/kernel/cpuinfo.c
arch/nios2/kernel/setup.c

index 203870c..338849c 100644 (file)
@@ -47,7 +47,7 @@ void __init setup_cpuinfo(void)
 
        str = of_get_property(cpu, "altr,implementation", &len);
        if (str)
-               strlcpy(cpuinfo.cpu_impl, str, sizeof(cpuinfo.cpu_impl));
+               strscpy(cpuinfo.cpu_impl, str, sizeof(cpuinfo.cpu_impl));
        else
                strcpy(cpuinfo.cpu_impl, "<unknown>");
 
index 40bc8fb..8582ed9 100644 (file)
@@ -121,7 +121,7 @@ asmlinkage void __init nios2_boot_init(unsigned r4, unsigned r5, unsigned r6,
                dtb_passed = r6;
 
                if (r7)
-                       strlcpy(cmdline_passed, (char *)r7, COMMAND_LINE_SIZE);
+                       strscpy(cmdline_passed, (char *)r7, COMMAND_LINE_SIZE);
        }
 #endif
 
@@ -129,10 +129,10 @@ asmlinkage void __init nios2_boot_init(unsigned r4, unsigned r5, unsigned r6,
 
 #ifndef CONFIG_CMDLINE_FORCE
        if (cmdline_passed[0])
-               strlcpy(boot_command_line, cmdline_passed, COMMAND_LINE_SIZE);
+               strscpy(boot_command_line, cmdline_passed, COMMAND_LINE_SIZE);
 #ifdef CONFIG_NIOS2_CMDLINE_IGNORE_DTB
        else
-               strlcpy(boot_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
+               strscpy(boot_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
 #endif
 #endif