From 9f3dec6b0491ea318954a5daba15b1392e6db36c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Mon, 8 Jan 2024 20:10:49 +0100 Subject: [PATCH] reserve: fix potential DBusMessage memory leak Our reference to the message must always be dropped, even if `dbus_connection_send()` fails. --- src/reserve.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/reserve.c b/src/reserve.c index 86cfd8f09..271f8db5b 100644 --- a/src/reserve.c +++ b/src/reserve.c @@ -423,6 +423,7 @@ int rd_device_acquire(struct rd_device *d) int rd_device_request_release(struct rd_device *d) { DBusMessage *m = NULL; + int res = 0; if (d->priority <= INT32_MIN) return -EBUSY; @@ -433,16 +434,22 @@ int rd_device_request_release(struct rd_device *d) "RequestRelease")) == NULL) { return -ENOMEM; } - if (!dbus_message_append_args(m, + + if (!dbus_message_append_args(m, DBUS_TYPE_INT32, &d->priority, DBUS_TYPE_INVALID)) { - dbus_message_unref(m); - return -ENOMEM; - } - if (!dbus_connection_send(d->connection, m, NULL)) { - return -EIO; + res = -ENOMEM; + goto exit; } - return 0; + + if (!dbus_connection_send(d->connection, m, NULL)) { + res = -EIO; + goto exit; + } + +exit: + dbus_message_unref(m); + return res; } int rd_device_complete_release(struct rd_device *d, int res)