]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: close peer pidfd
authorChristian Göttsche <cgzones@googlemail.com>
Sun, 19 May 2024 13:56:18 +0000 (15:56 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 22 May 2024 20:08:44 +0000 (22:08 +0200)
Do not leak the pidfd of the peer.

Fixes: 71be64064c9e ("sd-bus: add pidfd to the sd_bus_creds structure")
src/libsystemd/sd-bus/sd-bus.c

index 22784e8f66e0615f9b7f98c55449e995a4e11e5c..1a642cb19783104c71ddc61b72f796a4ce4a17af 100644 (file)
@@ -152,6 +152,14 @@ void bus_close_inotify_fd(sd_bus *b) {
         b->n_inotify_watches = 0;
 }
 
+static void bus_close_fds(sd_bus *b) {
+        assert(b);
+
+        bus_close_io_fds(b);
+        bus_close_inotify_fd(b);
+        b->pidfd = safe_close(b->pidfd);
+}
+
 static void bus_reset_queues(sd_bus *b) {
         assert(b);
 
@@ -192,8 +200,7 @@ static sd_bus* bus_free(sd_bus *b) {
         if (b->default_bus_ptr)
                 *b->default_bus_ptr = NULL;
 
-        bus_close_io_fds(b);
-        bus_close_inotify_fd(b);
+        bus_close_fds(b);
 
         free(b->label);
         free(b->groups);
@@ -1126,8 +1133,7 @@ static int bus_start_address(sd_bus *b) {
         assert(b);
 
         for (;;) {
-                bus_close_io_fds(b);
-                bus_close_inotify_fd(b);
+                bus_close_fds(b);
 
                 bus_kill_exec(b);
 
@@ -1802,8 +1808,7 @@ _public_ void sd_bus_close(sd_bus *bus) {
          * the bus object and the bus may be freed */
         bus_reset_queues(bus);
 
-        bus_close_io_fds(bus);
-        bus_close_inotify_fd(bus);
+        bus_close_fds(bus);
 }
 
 _public_ sd_bus *sd_bus_close_unref(sd_bus *bus) {