Fix: missing rcu read locking in trigger "unregister all" command
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 23 Jan 2019 20:29:14 +0000 (15:29 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 23 Jan 2019 20:31:31 +0000 (15:31 -0500)
While the notification subsystem all runs within a single thread,
the iteration over the triggers hash table must be protected using
the RCU read-side lock since the RCU worker may resize the hash
table while the iteration is performed.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/notification-thread-events.c

index 9d82b8313bfc59701619378a22cb69550bfc5eb4..052689a0ebd8439dbf11db0172df7eb520c68605 100644 (file)
@@ -2544,6 +2544,7 @@ int handle_notification_thread_trigger_unregister_all(
        struct cds_lfht_iter iter;
        struct lttng_trigger_ht_element *trigger_ht_element;
 
+       rcu_read_lock();
        cds_lfht_for_each_entry(state->triggers_ht, &iter, trigger_ht_element,
                        node) {
                int ret = handle_notification_thread_command_unregister_trigger(
@@ -2552,6 +2553,7 @@ int handle_notification_thread_trigger_unregister_all(
                        error_occurred = true;
                }
        }
+       rcu_read_unlock();
        return error_occurred ? -1 : 0;
 }
 
This page took 0.026898 seconds and 4 git commands to generate.