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
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user