m68k: emu: Replace strlcpy() with strscpy()
authorAzeem Shaikh <azeemshaikh38@gmail.com>
Wed, 30 Aug 2023 18:54:28 +0000 (18:54 +0000)
committerGeert Uytterhoeven <geert@linux-m68k.org>
Fri, 6 Oct 2023 08:03:01 +0000 (10:03 +0200)
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().

Direct replacement is safe here since return value of -errno
is used to check for truncation instead of sizeof(dest).

[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>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20230830185428.4109426-1-azeemshaikh38@gmail.com
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
arch/m68k/emu/natfeat.c

index b19dc00026d9953b5353bbf25ba8bd8fdc33ccc9..d124c62022c2d10505c1cb7f79e1a38b703622dd 100644 (file)
@@ -42,10 +42,10 @@ long nf_get_id(const char *feature_name)
 {
        /* feature_name may be in vmalloc()ed memory, so make a copy */
        char name_copy[32];
-       size_t n;
+       ssize_t n;
 
-       n = strlcpy(name_copy, feature_name, sizeof(name_copy));
-       if (n >= sizeof(name_copy))
+       n = strscpy(name_copy, feature_name, sizeof(name_copy));
+       if (n < 0)
                return 0;
 
        return nf_get_id_phys(virt_to_phys(name_copy));