From: Denys Vlasenko Date: Thu, 12 May 2011 08:59:18 +0000 (+0200) Subject: hush: remove one sigprocmask from exit path X-Git-Tag: 1_19_0~129 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ebc1ee2e2a243a0ff3de6d2b70406ba75b771fa0;p=oweals%2Fbusybox.git hush: remove one sigprocmask from exit path Signed-off-by: Denys Vlasenko --- diff --git a/shell/hush.c b/shell/hush.c index 89a13feb8..bb95d6318 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -1456,13 +1456,15 @@ static void record_pending_signo(int sig) static void sigexit(int sig) NORETURN; static void sigexit(int sig) { - /* Disable all signals: job control, SIGPIPE, etc. */ - sigprocmask_allsigs(SIG_BLOCK); - /* Careful: we can end up here after [v]fork. Do not restore * tty pgrp then, only top-level shell process does that */ - if (G_saved_tty_pgrp && getpid() == G.root_pid) + if (G_saved_tty_pgrp && getpid() == G.root_pid) { + /* Disable all signals: job control, SIGPIPE, etc. + * Mostly paranoid measure, to prevent infinite SIGTTOU. + */ + sigprocmask_allsigs(SIG_BLOCK); tcsetpgrp(G_interactive_fd, G_saved_tty_pgrp); + } /* Not a signal, just exit */ if (sig <= 0)