tracing: A few more updates for 5.9
Subsystems (3)
cover tracing: A few more updates for 5.9
Head SHA1: 2f5fb555637eff4a3e5579f2323cd358c77efdc8
Masami Hiramatsu (4):
lib/bootconfig: Fix a bug of breaking existing tree nodes lib/bootconfig: Fix to remove tailing spaces after value tools/bootconfig: Add testcases for repeated key with brace tools/bootconfig: Add testcase for tailing space
----
lib/bootconfig.c | 38 +++++++++++++++++++++++-------------- tools/bootconfig/test-bootconfig.sh | 25 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 14 deletions(-)
PATCH 1/4 lib/bootconfig: Fix a bug of breaking existing tree nodes
From: Masami Hiramatsu <[email protected]>
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.
--- lib/bootconfig.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-)
lib/bootconfig.c +23 -13
@@ -31,6 +31,8 @@ static size_t xbc_data_size __initdata;static struct xbc_node *last_parent__initdata ;static const char *xbc_err_msg__initdata ;static int xbc_err_pos__initdata ; +static int open_brace[XBC_DEPTH_MAX ]__initdata ; +static int brace_index__initdata ;static int __init xbc_parse_error (const char *msg,const char *p) {
@@ -431,27 +433,27 @@ static char *skip_spaces_until_newline(char *p)return p; } -static int __init __xbc_open_brace (void ) +static int __init __xbc_open_brace (char *p) { -/* Mark the last key as open brace */ - last_parent->next =XBC_NODE_MAX ; +/* 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);return 0 ; }static int __init __xbc_close_brace (char *p) { -struct xbc_node *node; - -if (!last_parent || last_parent->next !=XBC_NODE_MAX ) + brace_index--; +if (!last_parent || brace_index <0 || + (open_brace[brace_index] !=xbc_node_index (last_parent)))return xbc_parse_error ("Unexpected closing brace" , p); - node = last_parent; - node->next =0 ; -do { - node =xbc_node_get_parent (node); - }while (node && node->next !=XBC_NODE_MAX ); - last_parent = node; +if (brace_index ==0 ) + last_parent =NULL ; +else + last_parent = &xbc_nodes[open_brace[brace_index -1 ]];return 0 ; }
@@ -661,7 +663,7 @@ static int __init xbc_open_brace(char **k, char *n)return ret; *k = n; -return __xbc_open_brace (); +return __xbc_open_brace (n -1 ); }static int __init xbc_close_brace (char **k,char *n)
@@ -681,6 +683,13 @@ static int __init xbc_verify_tree(void)int i, depth, len, wlen;struct xbc_node *n, *m; +/* Brace closing */ +if (brace_index) { + n = &xbc_nodes[open_brace[brace_index]]; +return xbc_parse_error ("Brace is not closed" , +xbc_node_get_data (n)); + } +/* Empty tree */ if (xbc_node_num ==0 ) {xbc_parse_error ("Empty config" , xbc_data);
@@ -745,6 +754,7 @@ void __init xbc_destroy_all(void) xbc_node_num =0 ;memblock_free (__pa (xbc_nodes),sizeof (struct xbc_node ) *XBC_NODE_MAX ); xbc_nodes =NULL ; + brace_index =0 ; }/**
Signature · 1 line
2.28.0
PATCH 2/4 lib/bootconfig: Fix to remove tailing spaces after value
In reply to Steven RostedtFrom: Masami Hiramatsu <[email protected]>
Fix to remove tailing spaces after value. If there is a space after value, the bootconfig failed to remove it because it applies strim() before replacing the delimiter with null.
For example,
foo = var # comment
was parsed as below.
foo="var "
but user will expect
foo="var"
This fixes it by applying strim() after removing the delimiter.
--- lib/bootconfig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
lib/bootconfig.c +1 -1
@@ -494,8 +494,8 @@ static int __init __xbc_parse_value(char **__v, char **__n)break ; }if (strchr (",;\n#}" , c)) { - v =strim (v); *p++ ='\0' ; + v =strim (v);break ; } }
Signature · 1 line
2.28.0
PATCH 3/4 tools/bootconfig: Add testcases for repeated key with brace
In reply to Steven RostedtFrom: Masami Hiramatsu <[email protected]>
Add a testcase for repeated key with brace parsing issue.
--- tools/bootconfig/test-bootconfig.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+)
tools/bootconfig/test-bootconfig.sh +12 -0
@@ -137,6 +137,18 @@ $BOOTCONF $INITRD > $TEMPCONF cat $TEMPCONF xpass grep \'\"string\"\' $TEMPCONF +echo "Repeat same-key tree" +cat > $TEMPCONF << EOF +foo +bar +foo { buz } +EOF +echo > $INITRD + +xpass $BOOTCONF -a $TEMPCONF $INITRD +$BOOTCONF $INITRD > $OUTFILE +xpass grep -q "bar" $OUTFILE + echo "=== expected failure cases ===" for i in samples/bad-* ; do xfail $BOOTCONF -a $i $INITRD
Signature · 1 line
2.28.0
PATCH 4/4 tools/bootconfig: Add testcase for tailing space
In reply to Steven RostedtFrom: Masami Hiramatsu <[email protected]>
Add testcases for removing/keeping tailing space
in the value.
--- tools/bootconfig/test-bootconfig.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+)
tools/bootconfig/test-bootconfig.sh +13 -0
@@ -149,6 +149,19 @@ xpass $BOOTCONF -a $TEMPCONF $INITRD $BOOTCONF $INITRD > $OUTFILE xpass grep -q "bar" $OUTFILE + +echo "Remove/keep tailing spaces" +cat > $TEMPCONF << EOF +foo = val # comment +bar = "val2 " # comment +EOF +echo > $INITRD + +xpass $BOOTCONF -a $TEMPCONF $INITRD +$BOOTCONF $INITRD > $OUTFILE +xfail grep -q val[[:space:]] $OUTFILE +xpass grep -q val2[[:space:]] $OUTFILE + echo "=== expected failure cases ===" for i in samples/bad-* ; do xfail $BOOTCONF -a $i $INITRD
Signature · 1 line
2.28.0