From 976c99c5e3edf45c938bdd338c1daec45477316c Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 28 Jun 2024 17:06:31 +0100 Subject: [PATCH] shell-util: Fix a memory leak of a floating variant on error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If `params` is floating when provided by the caller, and if one of the early return paths is taken from this function, the call into GIO never sinks and takes ownership of the `GVariant`, and hence it’s leaked. Always explicitly sink the input variant as soon as the function is called, then it can’t be leaked. Signed-off-by: Philip Withnall Part-of: --- src/shell-util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/shell-util.c b/src/shell-util.c index 742aa829a..a965c7148 100644 --- a/src/shell-util.c +++ b/src/shell-util.c @@ -619,6 +619,7 @@ shell_util_systemd_call (const char *command, gpointer user_data) { g_autoptr (GTask) task = g_task_new (NULL, cancellable, callback, user_data); + g_autoptr (GVariant) params_owned = g_variant_ref_sink (g_steal_pointer (¶ms)); #ifdef HAVE_SYSTEMD g_autoptr (GDBusConnection) connection = NULL; @@ -695,7 +696,7 @@ shell_util_systemd_call (const char *command, "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", command, - params, + params_owned, G_VARIANT_TYPE ("(o)"), G_DBUS_CALL_FLAGS_NONE, -1, cancellable,