From 4296085ed28955001e74ac2c0cf6817ab9ecdb5f Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 17 Dec 2020 14:36:54 -0500 Subject: [PATCH] Fix: lttng-ust 2.13 should not try to use notifiers from 2.12 or prior probes Probe providers built against lttng-ust 2.12 or prior do not implement the event notifier callback, and accessing desc->u.ext.event_notifier_callback accesses beyond the size of struct lttng_event_desc. Therefore, skip those older probe providers from the list of providers considered for event notifications, and print an error when this situation is encountered. Currently, the error reporting of lttng-ust is performed through ERR(), which is only observable on the console of the application when run with LTTNG_UST_DEBUG=1. Signed-off-by: Mathieu Desnoyers Reviewed-by: Francis Deslauriers Change-Id: Ia8a9bae1a471ae5d30ff0364b28e1cd3a8b4e396 --- liblttng-ust/lttng-events.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/liblttng-ust/lttng-events.c b/liblttng-ust/lttng-events.c index 53bb1100..16d75da9 100644 --- a/liblttng-ust/lttng-events.c +++ b/liblttng-ust/lttng-events.c @@ -1708,6 +1708,13 @@ void lttng_session_sync_event_enablers(struct lttng_session *session) __tracepoint_probe_prune_release_queue(); } +/* Support for event notifier is introduced by probe provider major version 2. */ +static +bool lttng_ust_probe_supports_event_notifier(struct lttng_probe_desc *probe_desc) +{ + return probe_desc->major >= 2; +} + static void lttng_create_event_notifier_if_missing( struct lttng_event_notifier_enabler *event_notifier_enabler) @@ -1759,6 +1766,18 @@ void lttng_create_event_notifier_if_missing( if (found) continue; + /* Check that the probe supports event notifiers, else report the error. */ + if (!lttng_ust_probe_supports_event_notifier(probe_desc)) { + ERR("Probe \"%s\" contains event \"%s\" which matches an enabled event notifier, " + "but its version (%u.%u) is too old and does not implement event notifiers. " + "It needs to be recompiled against a newer version of LTTng-UST, otherwise " + "this event will not generate any notification.", + probe_desc->provider, + desc->name, + probe_desc->major, + probe_desc->minor); + continue; + } /* * We need to create a event_notifier for this event probe. */ -- 2.34.1