Fix: Lock metadata cache on session destroy
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 13 Jul 2020 18:59:33 +0000 (14:59 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 13 Jul 2020 19:02:43 +0000 (15:02 -0400)
commit 92143b2c5656 ("Fix: metadata stream leak, missing list removal and locking")
missed taking a lock protecting the metadata stream list iteration on
session destroy. This opens a race window between iteration and item
removal/free which triggers kernel OOPS.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lttng-events.c

index f5948f076283740f6a16f2487e23a42f26e3ddaa..bb72156a8d4ce97c07290c70bf1e077fbcf7d907 100644 (file)
@@ -199,8 +199,10 @@ void lttng_session_destroy(struct lttng_session *session)
                BUG_ON(chan->channel_type == METADATA_CHANNEL);
                _lttng_channel_destroy(chan);
        }
+       mutex_lock(&session->metadata_cache->lock);
        list_for_each_entry(metadata_stream, &session->metadata_cache->metadata_stream, list)
                _lttng_metadata_channel_hangup(metadata_stream);
+       mutex_unlock(&session->metadata_cache->lock);
        if (session->pid_tracker)
                lttng_pid_tracker_destroy(session->pid_tracker);
        kref_put(&session->metadata_cache->refcount, metadata_cache_destroy);
This page took 0.027797 seconds and 4 git commands to generate.