Fix: use newly created event filter for condition check
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Tue, 24 Sep 2019 15:24:17 +0000 (11:24 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 25 Sep 2019 16:32:05 +0000 (12:32 -0400)
The following commit introduced a regression while
fixing the filter and filter_expression ownership.

commit b0a23296344e57bd2e48e62ec2d7e0d8a38661bb
Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Date:   Sat Jan 12 14:53:56 2019 -0500

    Fix: leak of filter bytecode and expression on agent event re-enable

    The agent subsystem does not properly assume the clean-up of an
    event's filter bytecode and expression when a previously disabled
    event is re-enabled.

    This change ensures that the ownership of both the filter bytecode
    and expression is assumed by the agent subsystem and discarded
    when a matching event is found.

    Steps to reproduce the leak:
    $ lttng create
    $ lttng enable-event --python allo --filter 'a[42] == 241'
    $ lttng disable-event --python allo
    $ lttng enable-event --python allo --filter 'a[42] == 241'

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Setting the "filter" object to NULL prevents the call to
add_filter_app_ctx when needed.

We use the filter from the newly created event to
perform the check and the call to add_filter_app_ctx.

Fixes coverity #1399733

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/event.c

index f32db4429d0333b28f5b25f2967130c10bc6a5a3..a8b7646da6f9401c617761e3f6ca349e274ed065 100644 (file)
@@ -513,8 +513,9 @@ int event_agent_enable(struct ltt_ust_session *usess,
                created = 1;
        }
 
-       if (created && filter) {
-               ret = add_filter_app_ctx(filter, filter_expression, agt);
+       if (created && aevent->filter) {
+               ret = add_filter_app_ctx(
+                               aevent->filter, aevent->filter_expression, agt);
                if (ret != LTTNG_OK) {
                        goto error;
                }
This page took 0.026071 seconds and 4 git commands to generate.