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 19:47:52 +0000 (15:47 -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 27e7d029c9e452bccd5874239fcb68c7767f6364..988d2c4abad8dc4e29877c069616cfa3f6d63d33 100644 (file)
@@ -90,11 +90,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.026628 seconds and 4 git commands to generate.