]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bus-polkit: fix memory leak
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Jan 2024 14:54:42 +0000 (15:54 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Jan 2024 18:06:13 +0000 (19:06 +0100)
We need to destroy the hashmap entry keyed by the varlink object in case
this is a varlink request.

Follow-up for: d04c1a1c8e7c95daa483d8d52d5fc4c25fbc67f2

src/shared/bus-polkit.c

index fe9363aad4466312f3c602aee2d9e0cacee818c7..ff905d147f82c6f4a859bba01d5407fe963dd07b 100644 (file)
@@ -192,9 +192,9 @@ typedef struct AsyncPolkitQuery {
         AsyncPolkitQueryAction *action;
 
         sd_bus *bus;
-        sd_bus_message *request;
+        sd_bus_message *request;  /* the original bus method call that triggered the polkit auth, NULL in case of varlink */
         sd_bus_slot *slot;
-        Varlink *link;
+        Varlink *link;            /* the original varlink method call that triggered the polkit auth, NULL in case of bus */
 
         Hashmap *registry;
         sd_event_source *defer_event_source;
@@ -211,8 +211,12 @@ static AsyncPolkitQuery *async_polkit_query_free(AsyncPolkitQuery *q) {
 
         sd_bus_slot_unref(q->slot);
 
-        if (q->registry && q->request)
-                hashmap_remove(q->registry, q->request);
+        if (q->registry) {
+                if (q->request)
+                        hashmap_remove(q->registry, q->request);
+                if (q->link)
+                        hashmap_remove(q->registry, q->link);
+        }
 
         sd_bus_message_unref(q->request);