um: refactor deprecated strncpy to memcpy
authorJustin Stitt <justinstitt@google.com>
Wed, 9 Aug 2023 18:19:32 +0000 (18:19 +0000)
committerKees Cook <keescook@chromium.org>
Wed, 16 Aug 2023 20:52:19 +0000 (13:52 -0700)
Use `memcpy` since `console_buf` is not expected to be NUL-terminated
and it more accurately describes what is happening with the buffers
`console_buf` and `string` as per Kees' analysis [1].

Also mark char buffer as `__nonstring` as per Kees' suggestion [2].

This change now makes it more clear what this code does and that
`console_buf` is not expected to be NUL-terminated.

Link: https://lore.kernel.org/all/202308081708.D5ADC80F@keescook/
Link: https://github.com/KSPP/linux/issues/90
Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings
Cc: linux-hardening@vger.kernel.org
Suggested-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Justin Stitt <justinstitt@google.com>
Link: https://lore.kernel.org/r/20230809-arch-um-v3-1-f63e1122d77e@google.com
Signed-off-by: Kees Cook <keescook@chromium.org>
arch/um/drivers/mconsole_kern.c

index 5026e7b9adfe54960544600244e5b6b59cc15c7e..ff4bda95b9c7e26c4f92aec5ce2fa6ec84c65a4e 100644 (file)
@@ -554,7 +554,7 @@ struct mconsole_output {
 
 static DEFINE_SPINLOCK(client_lock);
 static LIST_HEAD(clients);
-static char console_buf[MCONSOLE_MAX_DATA];
+static char console_buf[MCONSOLE_MAX_DATA] __nonstring;
 
 static void console_write(struct console *console, const char *string,
                          unsigned int len)
@@ -567,7 +567,7 @@ static void console_write(struct console *console, const char *string,
 
        while (len > 0) {
                n = min((size_t) len, ARRAY_SIZE(console_buf));
-               strncpy(console_buf, string, n);
+               memcpy(console_buf, string, n);
                string += n;
                len -= n;