From: Mike Yuan Date: Thu, 1 Jan 2026 19:10:45 +0000 (+0100) Subject: udev,sysupdated: fix pidfd leak X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca6b65991ce38d73eb785eb187da8adcec8ad1d1;p=thirdparty%2Fsystemd.git udev,sysupdated: fix pidfd leak Follow-up for 179dcf924f7d0ac9398f54baeb39b47abd23aeaf After the mentioned commit, event_add_child_pidref() duplicates the pidfd internally, hence the original pidfd would be leaked with TAKE_PIDREF. --- diff --git a/src/sysupdate/sysupdated.c b/src/sysupdate/sysupdated.c index a9740ee8542..4eeaf3a7062 100644 --- a/src/sysupdate/sysupdated.c +++ b/src/sysupdate/sysupdated.c @@ -543,7 +543,7 @@ static int job_start(Job *j) { r = sd_event_source_set_child_process_own(j->child, true); if (r < 0) return log_error_errno(r, "Event loop failed to take ownership of child process: %m"); - TAKE_PIDREF(pid); + pidref_done(&pid); /* disarm sigkill_wait */ j->stdout_fd = TAKE_FD(stdout_fd); diff --git a/src/udev/udev-watch.c b/src/udev/udev-watch.c index 76de67733f4..10cbc848460 100644 --- a/src/udev/udev-watch.c +++ b/src/udev/udev-watch.c @@ -208,11 +208,6 @@ static int synthesize_change(Manager *manager, sd_device *dev) { return 0; } - r = sd_event_source_set_child_pidfd_own(s, true); - if (r < 0) - return r; - TAKE_PIDREF(pidref); - r = set_ensure_put(&manager->synthesize_change_child_event_sources, &event_source_hash_ops, s); if (r < 0) return r;