Fix: sessiond ht_match_event() check if filter is NULL
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 15 Jun 2016 21:18:03 +0000 (17:18 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 28 Jun 2016 14:49:26 +0000 (10:49 -0400)
It looks like an agent event's filter expression is NULL when
it's created with -a, for example:

    lttng enable-event -j -a

Since there's no check for this in ht_match_event(), strlen()
makes the session daemon segfault with this scenario:

    lttng create
    lttng enable-event -j -a
    lttng disable-event -j -a

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/agent.c

index 8e1ef0849fb13b4efb6c27e0e92c68d3fe71784d..7cbbbdee0dddfec3ef596b4d624031885fbf49b5 100644 (file)
@@ -143,11 +143,18 @@ static int ht_match_event(struct cds_lfht_node *node,
        }
 
        /* Filter expression */
-       if (strncmp(event->filter_expression, key->filter_expression,
-                       strlen(event->filter_expression)) != 0) {
+       if (!!event->filter_expression ^ !!key->filter_expression) {
+               /* One has a filter expression, the other does not */
                goto no_match;
        }
 
+       if (event->filter_expression) {
+               if (strncmp(event->filter_expression, key->filter_expression,
+                               strlen(event->filter_expression)) != 0) {
+                       goto no_match;
+               }
+       }
+
        return 1;
 
 no_match:
This page took 0.027334 seconds and 4 git commands to generate.