dcavalca / rpms / rpm

Forked from rpms/rpm a year ago
Clone
James Antill ee2eaf
From cb6aa82dbc10d554f8d234e934ae7c77e39a3ce2 Mon Sep 17 00:00:00 2001
James Antill ee2eaf
From: Panu Matilainen <pmatilai@redhat.com>
James Antill ee2eaf
Date: Tue, 12 Jan 2021 13:35:23 +0200
James Antill ee2eaf
Subject: [PATCH] Unblock signals in forked scriptlets
James Antill ee2eaf
James Antill ee2eaf
Since commit c5f82d3f6223ebd0c5cc0a07ea60393ae7284929 we've blocked
James Antill ee2eaf
most signals during transactions, which makes sense to rpm itself but
James Antill ee2eaf
the signal mask is inherited to childs and carried even across exec(),
James Antill ee2eaf
so all scriptlets are executing with those signals blocked as well.
James Antill ee2eaf
Which in turn does not make sense, the scriptlets could run stuff that
James Antill ee2eaf
actually depends on signal delivery (such as SIGALARM in RhBug:1913765).
James Antill ee2eaf
James Antill ee2eaf
Unblock all signals for forked scriptlet execution (Lua scriptlets are
James Antill ee2eaf
totally different as they execute in-process for now)
James Antill ee2eaf
---
James Antill ee2eaf
 lib/rpmscript.c | 5 +++++
James Antill ee2eaf
 1 file changed, 5 insertions(+)
James Antill ee2eaf
James Antill ee2eaf
diff --git a/lib/rpmscript.c b/lib/rpmscript.c
James Antill ee2eaf
index 2ae3378f7..c69d29554 100644
James Antill ee2eaf
--- a/lib/rpmscript.c
James Antill ee2eaf
+++ b/lib/rpmscript.c
James Antill ee2eaf
@@ -152,6 +152,11 @@ static void doScriptExec(ARGV_const_t argv, ARGV_const_t prefixes,
James Antill ee2eaf
 			FD_t scriptFd, FD_t out)
James Antill ee2eaf
 {
James Antill ee2eaf
     int xx;
James Antill ee2eaf
+    sigset_t set;
James Antill ee2eaf
+
James Antill ee2eaf
+    /* Unmask all signals, the scripts may need them */
James Antill ee2eaf
+    sigfillset(&set);
James Antill ee2eaf
+    sigprocmask(SIG_UNBLOCK, &set, NULL);
James Antill ee2eaf
 
James Antill ee2eaf
     /* SIGPIPE is ignored in rpm, reset to default for the scriptlet */
James Antill ee2eaf
     (void) signal(SIGPIPE, SIG_DFL);
James Antill ee2eaf
-- 
James Antill ee2eaf
2.29.2
James Antill ee2eaf