]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netconsole: avoid out-of-bounds access on empty string in trim_newline()
authorBreno Leitao <leitao@debian.org>
Mon, 20 Apr 2026 10:18:36 +0000 (03:18 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 23 Apr 2026 10:45:02 +0000 (12:45 +0200)
trim_newline() unconditionally dereferences s[len - 1] after computing
len = strnlen(s, maxlen). When the string is empty, len is 0 and the
expression underflows to s[(size_t)-1], reading (and potentially
writing) one byte before the buffer.

The two callers feed trim_newline() with the result of strscpy() from
configfs store callbacks (dev_name_store, userdatum_value_store).
configfs guarantees count >= 1 reaches the callback, but the byte
itself can be NUL: a userspace write(fd, "\0", 1) leaves the
destination empty after strscpy() and triggers the underflow. The OOB
write only fires if the adjacent byte happens to be '\n', so this is
not a security issue, but the access is undefined behaviour either way.

This pattern is commonly flagged by LLM-based code reviewers. While it
is not a security fix, the underlying access is undefined behaviour and
the change is small and self-contained, so it is a reasonable candidate
for the stable trees.

Guard the dereference on a non-zero length.

Fixes: ae001dc67907 ("net: netconsole: move newline trimming to function")
Cc: stable@vger.kernel.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Gustavo Luiz Duarte <gustavold@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260420-netcons_trim_newline-v1-1-dc35889aeedf@debian.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/netconsole.c

index 3c9acd6e49e8665aaafa782fb4b7856a913c3dd4..205384dab89a6948eef960e0287342a59eedeac0 100644 (file)
@@ -497,6 +497,8 @@ static void trim_newline(char *s, size_t maxlen)
        size_t len;
 
        len = strnlen(s, maxlen);
+       if (!len)
+               return;
        if (s[len - 1] == '\n')
                s[len - 1] = '\0';
 }