]> git.ipfire.org Git - pakfire.git/commitdiff
jail: Block SIGCHLD
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 5 Oct 2024 17:38:24 +0000 (17:38 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 5 Oct 2024 17:38:24 +0000 (17:38 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/jail.c

index 5cf17bbc2a7be2476675cf86a3912e13174038bc..7be231bda30b89ee423f119a0692dd34f3dcf57f 100644 (file)
@@ -1781,6 +1781,12 @@ static int pakfire_jail_wait_for_signal(struct pakfire_jail* jail, int fd) {
        return r;
 }
 
+// This is only to block the signal
+static int pakfire_jail_SIGCHLD(sd_event_source* source,
+               const struct signalfd_siginfo* si, void* data) {
+       return 0;
+}
+
 /*
        Called when the timer has expired.
 */
@@ -2238,6 +2244,14 @@ PAKFIRE_EXPORT int pakfire_jail_exec(struct pakfire_jail* jail, const char* argv
                goto ERROR;
        }
 
+       // Listen for SIGCHLD
+       r = sd_event_add_signal(ctx.loop, NULL, SIGCHLD|SD_EVENT_SIGNAL_PROCMASK,
+               pakfire_jail_SIGCHLD, NULL);
+       if (r < 0) {
+               CTX_ERROR(jail->ctx, "Could not register handling SIGCHLD: %s\n", strerror(-r));
+               goto ERROR;
+       }
+
        // Enable networking in interactive mode
        if (ctx.flags & PAKFIRE_JAIL_PTY_FORWARDING)
                ctx.flags |= PAKFIRE_JAIL_HAS_NETWORKING;