diff options
Diffstat (limited to 'poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-memory-leaks-on-event-destroy.patch')
-rw-r--r-- | poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-memory-leaks-on-event-destroy.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-memory-leaks-on-event-destroy.patch b/poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-memory-leaks-on-event-destroy.patch new file mode 100644 index 0000000000..21da932a75 --- /dev/null +++ b/poky/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-memory-leaks-on-event-destroy.patch @@ -0,0 +1,58 @@ +From b3fdf78b15beb940918da1e41eb68e24ba31bb87 Mon Sep 17 00:00:00 2001 +From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> +Date: Wed, 3 Mar 2021 10:10:16 -0500 +Subject: [PATCH 1/4] Fix: memory leaks on event destroy + +Both filter runtime and event enabler ref objects are owned by the +event, but are not freed upon destruction of the event object, thus +leaking memory. + +Upstream-status: backport + +Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> +Change-Id: Ice9b1c18b47584838aea2b965494d3c8391f4c84 +--- + lttng-events.c | 7 +++++++ + lttng-events.h | 1 + + 2 files changed, 8 insertions(+) + +diff --git a/lttng-events.c b/lttng-events.c +index f3398adc..984bd341 100644 +--- a/lttng-events.c ++++ b/lttng-events.c +@@ -919,6 +919,8 @@ int _lttng_event_unregister(struct lttng_event *event) + static + void _lttng_event_destroy(struct lttng_event *event) + { ++ struct lttng_enabler_ref *enabler_ref, *tmp_enabler_ref; ++ + switch (event->instrumentation) { + case LTTNG_KERNEL_TRACEPOINT: + lttng_event_put(event->desc); +@@ -944,6 +946,11 @@ void _lttng_event_destroy(struct lttng_event *event) + } + list_del(&event->list); + lttng_destroy_context(event->ctx); ++ lttng_free_event_filter_runtime(event); ++ /* Free event enabler refs */ ++ list_for_each_entry_safe(enabler_ref, tmp_enabler_ref, ++ &event->enablers_ref_head, node) ++ kfree(enabler_ref); + kmem_cache_free(event_cache, event); + } + +diff --git a/lttng-events.h b/lttng-events.h +index 1b9ab167..13b6abf5 100644 +--- a/lttng-events.h ++++ b/lttng-events.h +@@ -716,6 +716,7 @@ int lttng_enabler_attach_bytecode(struct lttng_enabler *enabler, + struct lttng_kernel_filter_bytecode __user *bytecode); + void lttng_enabler_event_link_bytecode(struct lttng_event *event, + struct lttng_enabler *enabler); ++void lttng_free_event_filter_runtime(struct lttng_event *event); + + int lttng_probes_init(void); + +-- +2.19.1 + |