]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
lib/bootconfig: check bounds before writing in __xbc_open_brace()
authorJosh Law <objecting@objecting.org>
Thu, 12 Mar 2026 19:11:42 +0000 (19:11 +0000)
committerMasami Hiramatsu (Google) <mhiramat@kernel.org>
Fri, 13 Mar 2026 08:46:09 +0000 (17:46 +0900)
The bounds check for brace_index happens after the array write.
While the current call pattern prevents an actual out-of-bounds
access (the previous call would have returned an error), the
write-before-check pattern is fragile and would become a real
out-of-bounds write if the error return were ever not propagated.

Move the bounds check before the array write so the function is
self-contained and safe regardless of caller behavior.

Link: https://lore.kernel.org/all/20260312191143.28719-3-objecting@objecting.org/
Fixes: ead1e19ad905 ("lib/bootconfig: Fix a bug of breaking existing tree nodes")
Cc: stable@vger.kernel.org
Signed-off-by: Josh Law <objecting@objecting.org>
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
lib/bootconfig.c

index ce25714351d51ad72fb52c8f03f5817a94353c48..9c3d59fb96ed4cab6d4c2774bcf7fb841ab30bd3 100644 (file)
@@ -532,9 +532,9 @@ static char *skip_spaces_until_newline(char *p)
 static int __init __xbc_open_brace(char *p)
 {
        /* Push the last key as open brace */
-       open_brace[brace_index++] = xbc_node_index(last_parent);
        if (brace_index >= XBC_DEPTH_MAX)
                return xbc_parse_error("Exceed max depth of braces", p);
+       open_brace[brace_index++] = xbc_node_index(last_parent);
 
        return 0;
 }