Re: [GIT PULL] tracing: Have filter check for balanced ops

From: Luis Henriques
Date: Mon Jun 22 2015 - 10:03:29 EST


On Mon, Jun 22, 2015 at 02:53:17PM +0100, Luis Henriques wrote:
> Hi Steven,
>
> On Wed, Jun 17, 2015 at 08:36:38AM -0400, Steven Rostedt wrote:
> ...
> > diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
> > index ced69da0ff55..7f2e97ce71a7 100644
> > --- a/kernel/trace/trace_events_filter.c
> > +++ b/kernel/trace/trace_events_filter.c
> > @@ -1369,19 +1369,26 @@ static int check_preds(struct filter_parse_state *ps)
> > {
> > int n_normal_preds = 0, n_logical_preds = 0;
> > struct postfix_elt *elt;
> > + int cnt = 0;
> >
> > list_for_each_entry(elt, &ps->postfix, list) {
> > - if (elt->op == OP_NONE)
> > + if (elt->op == OP_NONE) {
> > + cnt++;
> > continue;
> > + }
> >
> > if (elt->op == OP_AND || elt->op == OP_OR) {
> > n_logical_preds++;
> > + cnt--;
> > continue;
> > }
> > + if (elt->op != OP_NOT)
> > + cnt--;
>
> Since the OP_NOT was introduced only with e12c09cf3087 ("tracing: Add
> NOT to filtering logic"), how would stable kernels backport this fix?
> Do you think that just dropping the 'if' and do the 'cnt--'
> unconditionally would be ok?

Something like the patch below (only compile-tested).

Cheers,
--
Luís