Bootconfig for v7.0

- Update the bootconfig parser to stop searching for a value when it
   encounters a newline character.
   Note that this changes the bootconfig formatting but this should not
   fall under the don't break user space rule as users of bootconfig is
   for booting the kernel and not about applications running in the
   kernel's user space.
 
 - Update the tests for bootconfig parser to ensure the good examples
   to be parsed correctly by comparing the expected results.
 -----BEGIN PGP SIGNATURE-----
 
 iQFPBAABCgA5FiEEh7BulGwFlgAOi5DV2/sHvwUrPxsFAmmPs+sbHG1hc2FtaS5o
 aXJhbWF0c3VAZ21haWwuY29tAAoJENv7B78FKz8bG60H/1GuYXlEbJrfM2G1moC5
 c9HLkNON7xspEDWfT8lHk+T+4l7xj/Oriwl9Kkv/0F/P7NzIYZaSiHoht0TqrL6c
 /BR3pgHVayp4H/woaDZdo9KDCMFuxW0ukrbUriz/taMJn4+b7krScGoIM4sl1e02
 cQVYbJxP9x5oEhgrQEOBUHnYSaEcB7qBclIUCQOl3UV9krTZpKOsLe3tNjcj0JrZ
 ACmSvP4oGKNIz+IarNmlV0m5enJk/pZLIpovbbrfm1vV4lxDWTCbSF2Q/dmpY43k
 ZIhjgjSES5bS5PSl7aQJW7j2itCUHDu7kYz+i8ifjqMnEcJkE9PqqsdJAhq1J63i
 M6w=
 =t5PQ
 -----END PGP SIGNATURE-----

Merge tag 'bootconfig-v7.0' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace

Pull bootconfig updates from Masami Hiramatsu:

 - Update the bootconfig parser to stop searching for a value when it
   encounters a newline character

 - Update the tests for bootconfig parser to ensure the good examples to
   be parsed correctly by comparing the expected results

* tag 'bootconfig-v7.0' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
  bootconfig: Check the parsed output of the good examples
  bootconfig: Terminate value search if it hits a newline
This commit is contained in:
Linus Torvalds 2026-02-13 19:33:39 -08:00
commit 770aaedb46
19 changed files with 88 additions and 18 deletions

View file

@ -557,17 +557,13 @@ static int __init __xbc_close_brace(char *p)
/*
* Return delimiter or error, no node added. As same as lib/cmdline.c,
* you can use " around spaces, but can't escape " for value.
* *@__v must point real value string. (not including spaces before value.)
*/
static int __init __xbc_parse_value(char **__v, char **__n)
{
char *p, *v = *__v;
int c, quotes = 0;
v = skip_spaces(v);
while (*v == '#') {
v = skip_comment(v);
v = skip_spaces(v);
}
if (*v == '"' || *v == '\'') {
quotes = *v;
v++;
@ -617,6 +613,13 @@ static int __init xbc_parse_array(char **__v)
last_parent = xbc_node_get_child(last_parent);
do {
/* Search the next array value beyond comments and empty lines */
next = skip_spaces(*__v);
while (*next == '#') {
next = skip_comment(next);
next = skip_spaces(next);
}
*__v = next;
c = __xbc_parse_value(__v, &next);
if (c < 0)
return c;
@ -701,9 +704,17 @@ static int __init xbc_parse_kv(char **k, char *v, int op)
if (ret)
return ret;
c = __xbc_parse_value(&v, &next);
if (c < 0)
return c;
v = skip_spaces_until_newline(v);
/* If there is a comment, this has an empty value. */
if (*v == '#') {
next = skip_comment(v);
*v = '\0';
c = '\n';
} else {
c = __xbc_parse_value(&v, &next);
if (c < 0)
return c;
}
child = xbc_node_get_child(last_parent);
if (child && xbc_node_is_value(child)) {