]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-event: never pass negative errnos as signalfd to signalfd
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 19 Dec 2022 13:36:08 +0000 (14:36 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 19 Dec 2022 13:56:28 +0000 (14:56 +0100)
We treat any negative value as "invalid fd", but signalfd only
accepts -1.

src/libsystemd/sd-event/sd-event.c

index 299a6a2c8ceb1f4c8bba79d55cea27e6f5423a00..c936fcb3b64ac8f482ff1d0cdc972731c9cdec87 100644 (file)
@@ -659,7 +659,9 @@ static int event_make_signal_data(
         ss_copy = d->sigset;
         assert_se(sigaddset(&ss_copy, sig) >= 0);
 
-        r = signalfd(d->fd, &ss_copy, SFD_NONBLOCK|SFD_CLOEXEC);
+        r = signalfd(d->fd >= 0 ? d->fd : -1,   /* the first arg must be -1 or a valid signalfd */
+                     &ss_copy,
+                     SFD_NONBLOCK|SFD_CLOEXEC);
         if (r < 0) {
                 r = -errno;
                 goto fail;