]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
riscv: pi: replace strlcat with strscpy in get_early_cmdline
authorThorsten Blum <thorsten.blum@linux.dev>
Sun, 7 Jun 2026 02:17:52 +0000 (20:17 -0600)
committerPaul Walmsley <pjw@kernel.org>
Sun, 7 Jun 2026 02:17:52 +0000 (20:17 -0600)
Use the return value of strscpy() instead of calling strlen(fdt_cmdline)
again and return early on string truncation. Drop the explicit size
argument since early_cmdline has a fixed length, which strscpy()
determines using sizeof() when the argument is omitted.

Replace strlcat() with strscpy() to append CONFIG_CMDLINE.

Also remove the unnecessary fdt_cmdline NULL initialization.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Link: https://patch.msgid.link/20260504154924.141566-3-thorsten.blum@linux.dev
Signed-off-by: Paul Walmsley <pjw@kernel.org>
arch/riscv/kernel/pi/cmdline_early.c

index 389d086a071876dde2fd57ee6f6661e65c38b7c4..0afbe4077cb8ffba380e9b1862e711b6323468db 100644 (file)
@@ -12,8 +12,8 @@ static char early_cmdline[COMMAND_LINE_SIZE];
 
 static char *get_early_cmdline(uintptr_t dtb_pa)
 {
-       const char *fdt_cmdline = NULL;
-       unsigned int fdt_cmdline_size = 0;
+       const char *fdt_cmdline;
+       ssize_t fdt_cmdline_size = 0;
        int chosen_node;
 
        if (!IS_ENABLED(CONFIG_CMDLINE_FORCE)) {
@@ -22,18 +22,18 @@ static char *get_early_cmdline(uintptr_t dtb_pa)
                        fdt_cmdline = fdt_getprop((void *)dtb_pa, chosen_node,
                                                  "bootargs", NULL);
                        if (fdt_cmdline) {
-                               fdt_cmdline_size = strlen(fdt_cmdline);
-                               strscpy(early_cmdline, fdt_cmdline,
-                                       COMMAND_LINE_SIZE);
+                               fdt_cmdline_size = strscpy(early_cmdline, fdt_cmdline);
+                               if (fdt_cmdline_size < 0)
+                                       return early_cmdline;
                        }
                }
        }
 
        if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) ||
            IS_ENABLED(CONFIG_CMDLINE_FORCE) ||
-           fdt_cmdline_size == 0 /* CONFIG_CMDLINE_FALLBACK */) {
-               strlcat(early_cmdline, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-       }
+           fdt_cmdline_size == 0 /* CONFIG_CMDLINE_FALLBACK */)
+               strscpy(early_cmdline + fdt_cmdline_size, CONFIG_CMDLINE,
+                       COMMAND_LINE_SIZE - fdt_cmdline_size);
 
        return early_cmdline;
 }