lib/bootconfig: Fix a bug of breaking existing tree nodes
authorMasami Hiramatsu <mhiramat@kernel.org>
Mon, 21 Sep 2020 09:44:42 +0000 (18:44 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Oct 2020 15:36:33 +0000 (17:36 +0200)
commitdce326c2b35b1c6edaedea7db07149745c52fa22
tree1992c2c828ac6d29d0ca74a9a570d4d0748ad335
parent6540544b78f8973bb16400ce3a90b5ebe0b793f6
lib/bootconfig: Fix a bug of breaking existing tree nodes

commit ead1e19ad905b97261f0ad7a98bb64abb9323b2b upstream.

Fix a bug of breaking existing tree nodes by parsing the second
and subsequent braces. Since the bootconfig parser uses the
node.next field as a flag of current parent node, but this will
break the existing tree if the same key node is specified again
in the bootconfig.

For example, the following bootconfig should be foo.buz and bar.

foo
bar
foo { buz }

However, when parsing the brace "{", it breaks foo->bar link
by marking open-brace node. So the bootconfig unlinks bar
from the bootconfig internal tree.

This introduces a stack outside of the tree and record the
last open-brace on the stack instead of using node.next field.

Link: https://lkml.kernel.org/r/160068148267.1088739.8264704338030168660.stgit@devnote2
Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
Cc: Ingo Molnar <mingo@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
lib/bootconfig.c