From e67ab57ca3ec8a1833ed47146dddd628aa2d8f42 Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Sat, 26 Aug 2017 19:11:39 -0500 Subject: [PATCH] Fix uninitialized sigaction.sa_flags valgrind error Valgrind warns that the sometimes uninitialized sigaction.sa_flags field is sometimes used when passed to the signal handler. This patch explicitly zeros out the sigaction.sa_flags field at creation time. --- src/signal.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/signal.cpp b/src/signal.cpp index 1b937825c..f195b7a54 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -270,6 +270,8 @@ void signal_reset_handlers() { static void set_interactive_handlers() { struct sigaction act, oact; + act.sa_flags = 0; + oact.sa_flags = 0; sigemptyset(&act.sa_mask); // Interactive mode. Ignore interactive signals. We are a shell, we know what is best for @@ -315,6 +317,7 @@ static void set_interactive_handlers() { static void set_non_interactive_handlers() { struct sigaction act; + act.sa_flags = 0; sigemptyset(&act.sa_mask); // Non-interactive. Ignore interrupt, check exit status of processes to determine result @@ -327,6 +330,7 @@ static void set_non_interactive_handlers() { /// Sets up appropriate signal handlers. void signal_set_handlers() { struct sigaction act; + act.sa_flags = 0; sigemptyset(&act.sa_mask); // Ignore SIGPIPE. We'll detect failed writes and deal with them appropriately. We don't want @@ -358,6 +362,7 @@ void signal_handle(int sig, int do_handle) { (sig == SIGTTOU) || (sig == SIGCHLD)) return; + act.sa_flags = 0; sigemptyset(&act.sa_mask); if (do_handle) { act.sa_flags = SA_SIGINFO;