[ovs-dev] [PATCH] valgrind: Fix memory leak at expr_error.

William Tu u9012063 at gmail.com
Tue Apr 5 22:51:47 UTC 2016


Hi Justin,
Thanks for the feedback. I think the original code is OK, although a little
misleading.

At action_parse_field(), the address of *ctx is not passed into
expr_parse_field. The expr_parse_field has a ctx as local variable on its
stack. So when it returns, the 'error' contains a newly malloc char* and
error != ctx->error.

It is when calling action_error(), then the 'ctx->error' is NULL and gets a
copy of 'error', so we need to free(error).

Regards,
William

On Tue, Apr 5, 2016 at 3:08 PM, Justin Pettit <jpettit at ovn.org> wrote:

>
> > On Apr 4, 2016, at 2:51 PM, William Tu <u9012063 at gmail.com> wrote:
> >
> > Reported by test case 2015: ovn -- action parsing.
> >    xvasprintf (util.c:164)
> >    expr_error (expr.c:489)
> >    expr_parse_field (expr.c:2910)
> >    action_parse_field (actions.c:287)
> >
> > Signed-off-by: William Tu <u9012063 at gmail.com>
> > ---
> > ovn/lib/actions.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/ovn/lib/actions.c b/ovn/lib/actions.c
> > index 44957c7..a17b5a7 100644
> > --- a/ovn/lib/actions.c
> > +++ b/ovn/lib/actions.c
> > @@ -288,6 +288,7 @@ action_parse_field(struct action_context *ctx,
> >                              &prereqs);
> >     if (error) {
> >         action_error(ctx, "%s", error);
> > +        free(error);
> >         return false;
> >     }
>
> Unless I'm reading it wrong, the original code seems a little funky.
> "error" is set by expr_parse_field() as the value of "ctx->error".  "ctx"
> is then handed to action_error() which won't do anything since "ctx->error"
> is not NULL.  It seems like this call to action_error() is not necessary at
> all.
>
> Back to your fix, if there is a problem, it seems like
> action_force_match() would have similar problems to action_parse_field();
> they're only called by parse_action().  You're essentially freeing
> "ctx->error", but isn't it needed by parse_action()?
>
> --Justin
>
>
>



More information about the dev mailing list