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>
 #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;
        }
 
        /* 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;
 }
 
        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();
 
 
                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)