Commit 17fda38f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-fix-filter-4.1-rc8' of...

Merge tag 'trace-fix-filter-4.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing filter fix from Steven Rostedt:
 "Vince Weaver reported a warning when he added perf event filters into
  his fuzzer tests.  There's a missing check of balanced operations when
  parenthesis are used, and this triggers a WARN_ON() and when reading
  the failure, the filter reports no failure occurred.

  The operands were not being checked if they match, this adds that"

* tag 'trace-fix-filter-4.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Have filter check for balanced ops
parents 32e0e382 2cf30dc1
...@@ -1369,19 +1369,26 @@ static int check_preds(struct filter_parse_state *ps) ...@@ -1369,19 +1369,26 @@ static int check_preds(struct filter_parse_state *ps)
{ {
int n_normal_preds = 0, n_logical_preds = 0; int n_normal_preds = 0, n_logical_preds = 0;
struct postfix_elt *elt; struct postfix_elt *elt;
int cnt = 0;
list_for_each_entry(elt, &ps->postfix, list) { list_for_each_entry(elt, &ps->postfix, list) {
if (elt->op == OP_NONE) if (elt->op == OP_NONE) {
cnt++;
continue; continue;
}
if (elt->op == OP_AND || elt->op == OP_OR) { if (elt->op == OP_AND || elt->op == OP_OR) {
n_logical_preds++; n_logical_preds++;
cnt--;
continue; continue;
} }
if (elt->op != OP_NOT)
cnt--;
n_normal_preds++; n_normal_preds++;
WARN_ON_ONCE(cnt < 0);
} }
if (!n_normal_preds || n_logical_preds >= n_normal_preds) { if (cnt != 1 || !n_normal_preds || n_logical_preds >= n_normal_preds) {
parse_error(ps, FILT_ERR_INVALID_FILTER, 0); parse_error(ps, FILT_ERR_INVALID_FILTER, 0);
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment