[dfsan] Test IGN and DFL for sigaction
Reviewed-by: morehouse
Differential Revision: https://reviews.llvm.org/D95957
GitOrigin-RevId: eb5c0a90e7d96325cfc537629bef769448eb9b71
diff --git a/test/dfsan/custom.cpp b/test/dfsan/custom.cpp
index 94ca7a8..9129eff 100644
--- a/test/dfsan/custom.cpp
+++ b/test/dfsan/custom.cpp
@@ -847,10 +847,23 @@
struct sigaction oldact;
assert(0 == sigaction(SIGUSR1, &newact_with_sighandler, &oldact));
assert(oldact.sa_sigaction == SignalAction);
+ assert(oldact.sa_flags & SA_SIGINFO);
+
+ // Set SIG_IGN or SIG_DFL, and check the previous one is expected.
+ newact_with_sighandler.sa_handler = SIG_IGN;
+ assert(0 == sigaction(SIGUSR1, &newact_with_sighandler, &oldact));
+ assert(oldact.sa_handler == SignalHandler);
+ assert((oldact.sa_flags & SA_SIGINFO) == 0);
+
+ newact_with_sighandler.sa_handler = SIG_DFL;
+ assert(0 == sigaction(SIGUSR1, &newact_with_sighandler, &oldact));
+ assert(oldact.sa_handler == SIG_IGN);
+ assert((oldact.sa_flags & SA_SIGINFO) == 0);
// Restore sigaction to the orginal setting, check the last one is SignalHandler
assert(0 == sigaction(SIGUSR1, &origin_act, &oldact));
- assert(oldact.sa_handler == SignalHandler);
+ assert(oldact.sa_handler == SIG_DFL);
+ assert((oldact.sa_flags & SA_SIGINFO) == 0);
}
void test_signal() {