OSDN Git Service

kallsyms: Replace all non-returning strlcpy with strscpy
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Wed, 14 Jun 2023 01:03:54 +0000 (01:03 +0000)
committerKees Cook <keescook@chromium.org>
Wed, 14 Jun 2023 19:27:38 +0000 (12:27 -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/20230614010354.1026096-1-azeemshaikh38@gmail.com
kernel/kallsyms.c
kernel/params.c

index 7774739..ddb91d8 100644 (file)
@@ -716,7 +716,7 @@ static int get_ksymbol_bpf(struct kallsym_iter *iter)
 {
        int ret;
 
-       strlcpy(iter->module_name, "bpf", MODULE_NAME_LEN);
+       strscpy(iter->module_name, "bpf", MODULE_NAME_LEN);
        iter->exported = 0;
        ret = bpf_get_kallsym(iter->pos - iter->pos_ftrace_mod_end,
                              &iter->value, &iter->type,
@@ -736,7 +736,7 @@ static int get_ksymbol_bpf(struct kallsym_iter *iter)
  */
 static int get_ksymbol_kprobe(struct kallsym_iter *iter)
 {
-       strlcpy(iter->module_name, "__builtin__kprobes", MODULE_NAME_LEN);
+       strscpy(iter->module_name, "__builtin__kprobes", MODULE_NAME_LEN);
        iter->exported = 0;
        return kprobe_get_kallsym(iter->pos - iter->pos_bpf_end,
                                  &iter->value, &iter->type,
index 6a75489..07d01f6 100644 (file)
@@ -847,7 +847,7 @@ static void __init param_sysfs_builtin(void)
                        name_len = 0;
                } else {
                        name_len = dot - kp->name + 1;
-                       strlcpy(modname, kp->name, name_len);
+                       strscpy(modname, kp->name, name_len);
                }
                kernel_add_sysfs_param(modname, kp, name_len);
        }