1
Fork 0

pw-reserve: fix potential DBusMessage memory leak

Our reference to the message must always be dropped,
even if `dbus_connection_send()` fails.
This commit is contained in:
Barnabás Pőcze 2024-01-07 17:29:14 +01:00 committed by Wim Taymans
parent 72d5417857
commit e2d3f9140b
1 changed files with 14 additions and 7 deletions

View File

@ -436,6 +436,7 @@ int rd_device_acquire(struct rd_device *d)
int rd_device_request_release(struct rd_device *d) int rd_device_request_release(struct rd_device *d)
{ {
DBusMessage *m = NULL; DBusMessage *m = NULL;
int res = 0;
if (d->priority <= INT32_MIN) if (d->priority <= INT32_MIN)
return -EBUSY; return -EBUSY;
@ -446,16 +447,22 @@ int rd_device_request_release(struct rd_device *d)
"RequestRelease")) == NULL) { "RequestRelease")) == NULL) {
return -ENOMEM; return -ENOMEM;
} }
if (!dbus_message_append_args(m,
if (!dbus_message_append_args(m,
DBUS_TYPE_INT32, &d->priority, DBUS_TYPE_INT32, &d->priority,
DBUS_TYPE_INVALID)) { DBUS_TYPE_INVALID)) {
dbus_message_unref(m); res = -ENOMEM;
return -ENOMEM; goto exit;
}
if (!dbus_connection_send(d->connection, m, NULL)) {
return -EIO;
} }
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) int rd_device_complete_release(struct rd_device *d, int res)