From: Todd C. Miller Date: Sun, 2 Nov 2008 14:45:31 +0000 (+0000) Subject: Zero out sigaction_t before use in case it has non-standard entries. X-Git-Tag: SUDO_1_7_0~63 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4afceb8e9282e451e062f491c91aeba057fa8655;p=sudo Zero out sigaction_t before use in case it has non-standard entries. --- diff --git a/logging.c b/logging.c index 57ac3cf8a..a61792e48 100644 --- a/logging.c +++ b/logging.c @@ -504,6 +504,7 @@ send_mail(line) closefrom(STDERR_FILENO + 1); /* Ignore SIGPIPE in case mailer exits prematurely (or is missing). */ + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = SIG_IGN; diff --git a/mon_systrace.c b/mon_systrace.c index 26be13913..e8ccb6402 100644 --- a/mon_systrace.c +++ b/mon_systrace.c @@ -115,6 +115,7 @@ systrace_attach(pid) sigfillset(&set); if (sigprocmask(SIG_BLOCK, &set, &oset) != 0) error(1, "sigprocmask"); + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = catchsig; @@ -152,6 +153,7 @@ systrace_attach(pid) /* set signal state for tracer */ dodetach = 0; + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = catchsig; diff --git a/parse.c b/parse.c index c58ac38ad..f8bb455e2 100644 --- a/parse.c +++ b/parse.c @@ -131,6 +131,7 @@ sudo_file_parse(nss) * Update the defaults based on what was set by sudoers. * If skip_cmnd is 1, skip DEFAULTS_CMND, if it is 0, skip all others. * Returns TRUE on success and FALSE on failure. + * XXX - move to defaults.c or match.c */ int update_defaults(what) diff --git a/sudo.c b/sudo.c index 17de1116f..a91b4b1b7 100644 --- a/sudo.c +++ b/sudo.c @@ -202,6 +202,7 @@ main(argc, argv, envp) * us at some point and avoid the logging. * Install handler to wait for children when they exit. */ + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sa.sa_handler = SIG_IGN; diff --git a/sudo_edit.c b/sudo_edit.c index 23669d8c0..6b82ee36e 100644 --- a/sudo_edit.c +++ b/sudo_edit.c @@ -79,7 +79,6 @@ sudo_edit(argc, argv, envp) char **nargv, **ap, *editor, *cp; char buf[BUFSIZ]; int error, i, ac, ofd, tfd, nargc, rval, tmplen, wasblank; - sigaction_t sa; struct stat sb; struct timespec ts1, ts2; struct tempfile { @@ -218,9 +217,6 @@ sudo_edit(argc, argv, envp) nargv[ac] = NULL; /* Allow the editor to be suspended. */ - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART; - sa.sa_handler = SIG_DFL; (void) sigaction(SIGTSTP, &saved_sa_tstp, NULL); /* diff --git a/tgetpass.c b/tgetpass.c index ee3e56d04..9f31c1727 100644 --- a/tgetpass.c +++ b/tgetpass.c @@ -154,6 +154,7 @@ restart: * Catch signals that would otherwise cause the user to end * up with echo turned off in the shell. */ + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = SA_INTERRUPT; /* don't restart system calls */ sa.sa_handler = handler; @@ -260,6 +261,7 @@ sudo_askpass(prompt) } /* Ignore SIGPIPE in case child exits prematurely */ + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = SIG_IGN; diff --git a/visudo.c b/visudo.c index eb4b86a45..6d7d36446 100644 --- a/visudo.c +++ b/visudo.c @@ -637,6 +637,7 @@ setup_signals() /* * Setup signal handlers to cleanup nicely. */ + zero_bytes(&sa, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sa.sa_handler = quit;