From: Yu Watanabe Date: Fri, 18 Apr 2025 00:00:35 +0000 (+0900) Subject: daemon-util: remove existing fds with the same name from fdstore X-Git-Tag: v258-rc1~785^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F37162%2Fhead;p=thirdparty%2Fsystemd.git daemon-util: remove existing fds with the same name from fdstore Currently, all use cases of notify_push_fd()/notify_push_fdf() assume that the name of each fd in the fdstore is unique. For safety, let's remove the existing fds before pushing a new one to avoid multiple fds with the same name stored in the fdstore. --- diff --git a/src/shared/daemon-util.c b/src/shared/daemon-util.c index e83ca8f6637..85d94336263 100644 --- a/src/shared/daemon-util.c +++ b/src/shared/daemon-util.c @@ -56,6 +56,9 @@ int notify_push_fd(int fd, const char *name) { if (!state) return -ENOMEM; + /* Remove existing fds with the same name in fdstore. */ + (void) notify_remove_fd_warn(name); + return sd_pid_notify_with_fds(0, /* unset_environment = */ false, state, &fd, 1); } diff --git a/src/udev/udev-config.c b/src/udev/udev-config.c index 52855145da7..ef0ee0abd69 100644 --- a/src/udev/udev-config.c +++ b/src/udev/udev-config.c @@ -553,9 +553,6 @@ int manager_serialize_config(Manager *manager) { if (r < 0) return log_warning_errno(r, "Failed to finalize serialization file: %m"); - /* Remove the previous serialization to make it replaced with the new one. */ - (void) notify_remove_fd_warn("config-serialization"); - r = notify_push_fd(fileno(f), "config-serialization"); if (r < 0) return log_warning_errno(r, "Failed to push serialization fd to service manager: %m");