tools/bootconfig: Preserve filters when resetting and applying tracing
Subsystems (2)
cover tools/bootconfig: Preserve filters when resetting and applying tracing
Hi Masami,
Here are two more fixes for the bootconfig tracing scripts. They address resetting existing histograms and applying saved filter strings. The patches can be applied independently.
The first patch fixes histogram removal when a filter contains brackets or repeated spaces. A failed removal can leave a variable provider installed after reset, including a case where the helper returns success. It uses separate sed expressions for [active] and [paused], following your portability feedback.
The second patch keeps quoted strings intact when applying a bootconfig. Currently, repeated spaces can be collapsed and literal wildcard characters can expand to filenames, changing the filter being installed.
Both were tested in temporary tracefs instances on my Ubuntu machine, running kernel 7.0.0-38-generic, with recording disabled. The individual patch emails include the reproduction details.
Feedback is welcome.
Thanks,
Eduardo
Eduardo Mucelli Rezende Oliveira (2):
tools/bootconfig: Preserve filters when resetting histogram triggers tools/bootconfig: Quote command strings when applying ftrace settings
tools/bootconfig/scripts/bconf2ftrace.sh | 2 +- tools/bootconfig/scripts/ftrace.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
base-commit: e28458ef30ad66ce7cd2299ec5ee8a8a016d67ff
Signature · 1 line
2.53.0
PATCH 1/2 tools/bootconfig: Preserve filters when resetting histogram triggers
reset_trigger_file() cuts a trigger line at its first '[' to discard the histogram state suffix. A filter such as prev_comm ~ "[ab]" is truncated inside its quoted string, producing an invalid removal command.
This also breaks the first pass that removes action histograms before their variable providers. If an action histogram cannot be removed and its provider is visited first in the second pass, the provider is busy and remains installed after reset.
Remove only the trailing [active] or [paused] annotation. Quote the line while extracting the command so that repeated spaces inside the filter also survive, allowing the action histogram to match and be removed.
---
I tested reset_trigger_file in a temporary tracefs instance on my Ubuntu machine, running kernel 7.0.0-38-generic, with recording disabled. With an action histogram depending on a provider that comes first in the event-directory order, the original helper left the provider behind. This happened with a bracketed filter and with repeated spaces inside a string. The spaced-string case even returned success.
With the fix, both histograms were removed. I also checked active and paused histograms, onmax actions, and ordinary filter controls.
tools/bootconfig/scripts/ftrace.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/bootconfig/scripts/ftrace.sh +2 -2
@@ -21,13 +21,13 @@ reset_trigger_file() { # remove action triggers first grep -H ':on[^:]*(' $@ | while read line; do - cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["` + cmd=`echo "$line" | cut -f2- -d: | sed -e 's/ \[active\]$//' -e 's/ \[paused\]$//'` file=`echo $line | cut -f1 -d:` echo "!$cmd" >> $file done grep -Hv ^# $@ | while read line; do - cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["` + cmd=`echo "$line" | cut -f2- -d: | sed -e 's/ \[active\]$//' -e 's/ \[paused\]$//'` file=`echo $line | cut -f1 -d:` echo "!$cmd" > $file done
Signature · 1 line
2.53.0
PATCH 2/2 tools/bootconfig: Quote command strings when applying ftrace settings
In reply to Eduardo Mucelli Rezende Oliveirarun_cmd() passes its command string to eval using an unquoted $*. The shell performs field splitting and pathname expansion before eval can parse the quotes in that string.
For example, an event filter prev_comm == "a b" is applied as prev_comm == "a b". A literal "*" surrounded by spaces inside a filter can also expand to filenames in the current directory. The printed command still contains the intended string, so --apply changes the settings even though the preview looks correct.
Quote "$*" when passing it to eval to preserve the command string. This fixes both per-event filters and histogram actions.
---
I tested this with hand-written configs in a temporary tracefs instance on my Ubuntu machine, running kernel 7.0.0-38-generic, with recording disabled. I checked both event filters and histogram action filters. The original helper collapsed repeated spaces and expanded a literal * into filenames. With the fix, the strings were preserved. Ordinary string and numeric filters worked in both versions.
tools/bootconfig/scripts/bconf2ftrace.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/bootconfig/scripts/bconf2ftrace.sh +1 -1
@@ -41,7 +41,7 @@ fi run_cmd() { # command echo "$*" if [ x"$APPLY" != x ]; then # apply command - eval $* + eval "$*" fi }
Signature · 1 line
2.53.0