Messages in this thread Patch in this message | | | From | Will Hawkins <> | Subject | [PATCH v2] trace-cmd record: Fix syntax in make_pid_filter | Date | Fri, 13 Oct 2017 14:40:06 -0400 |
| |
In older versions of the kernel, event filtering by pid does not use the set_event_pid file. Instead, ftrace uses a common filter (created in make_pid_filter) to filter events based on PID.
The syntax of the filter generated by this function is overly permissive. When filtering by pid, || is used where && should be (in certain cases) which means that unrelated events are captured.
Signed-off-by: Will Hawkins <hawkinsw@borlaugic.com> --- trace-record.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/trace-record.c b/trace-record.c index a0b6541..741fe53 100644 --- a/trace-record.c +++ b/trace-record.c @@ -935,14 +935,16 @@ static char *make_pid_filter(char *curr_filter, const char *field) str = filter + curr_len; for (p = filter_pids; p; p = p->next) { - if (p == filter_pids) - orit = ""; - else - orit = "||"; - if (p->exclude) + if (p->exclude) { match = "!="; - else + orit = "&&"; + } else { match = "=="; + orit = "||"; + } + if (p == filter_pids) + orit = ""; + len = sprintf(str, "%s(%s%s%d)", orit, field, match, p->pid); str += len; } -- 2.7.4
| |