summaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorDenys Vlasenko2016-07-16 18:33:55 +0200
committerDenys Vlasenko2016-07-16 18:33:55 +0200
commite5814a5a42f40274aaadc1187680ffe5c4632c0e (patch)
tree4f0b282b781e4e2da2a02b4171b8d282ad4511b8 /shell/ash.c
parentca003385f1e32646c249dfcd3717afbe7535dcec (diff)
downloadbusybox-e5814a5a42f40274aaadc1187680ffe5c4632c0e.zip
busybox-e5814a5a42f40274aaadc1187680ffe5c4632c0e.tar.gz
ash: do not leave SIGQUIT ignored on "exec CMD"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/ash.c')
-rw-r--r--shell/ash.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index faa45a8..4f6376f 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -323,7 +323,7 @@ struct globals_misc {
#define S_DFL 1 /* default signal handling (SIG_DFL) */
#define S_CATCH 2 /* signal is caught */
#define S_IGN 3 /* signal is ignored (SIG_IGN) */
-#define S_HARD_IGN 4 /* signal is ignored permenantly */
+#define S_HARD_IGN 4 /* signal is ignored permanently */
/* indicates specified signal received */
uint8_t gotsig[NSIG - 1]; /* offset by 1: "signal" 0 is meaningless */
@@ -9024,7 +9024,20 @@ execcmd(int argc UNUSED_PARAM, char **argv)
iflag = 0; /* exit on error */
mflag = 0;
optschanged();
+ /* We should set up signals for "exec CMD"
+ * the same way as for "CMD" without "exec".
+ * But optschanged->setinteractive->setsignal
+ * still thought we are a root shell. Therefore, for example,
+ * SIGQUIT is still set to IGN. Fix it:
+ */
+ shlvl++;
+ setsignal(SIGQUIT);
+ /*setsignal(SIGTERM); - unnecessary because of iflag=0 */
+ /*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
+ /*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
+
shellexec(argv + 1, pathval(), 0);
+ /* NOTREACHED */
}
return 0;
}