ash: do not leave SIGQUIT ignored on "exec CMD"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
ca003385f1
commit
e5814a5a42
15
shell/ash.c
15
shell/ash.c
@ -323,7 +323,7 @@ struct globals_misc {
|
|||||||
#define S_DFL 1 /* default signal handling (SIG_DFL) */
|
#define S_DFL 1 /* default signal handling (SIG_DFL) */
|
||||||
#define S_CATCH 2 /* signal is caught */
|
#define S_CATCH 2 /* signal is caught */
|
||||||
#define S_IGN 3 /* signal is ignored (SIG_IGN) */
|
#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 */
|
/* indicates specified signal received */
|
||||||
uint8_t gotsig[NSIG - 1]; /* offset by 1: "signal" 0 is meaningless */
|
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 */
|
iflag = 0; /* exit on error */
|
||||||
mflag = 0;
|
mflag = 0;
|
||||||
optschanged();
|
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);
|
shellexec(argv + 1, pathval(), 0);
|
||||||
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
2
shell/ash_test/ash-signals/sigquit_exec.right
Normal file
2
shell/ash_test/ash-signals/sigquit_exec.right
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
SigIgn: 0000000000000000
|
||||||
|
SigIgn: 0000000000000000
|
4
shell/ash_test/ash-signals/sigquit_exec.tests
Executable file
4
shell/ash_test/ash-signals/sigquit_exec.tests
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
# Should show no masked signals in both cases.
|
||||||
|
# We had a bug where SIGQUIT was masked on exec.
|
||||||
|
grep SigIgn: /proc/self/status
|
||||||
|
exec grep SigIgn: /proc/self/status
|
Loading…
Reference in New Issue
Block a user