From 8c7b59ad174d3c2927f6fdf0d8c9c87e748ca942 Mon Sep 17 00:00:00 2001 From: "Tate, Hongliang Tian" Date: Fri, 17 Jul 2020 17:10:55 +0000 Subject: [PATCH] Fix a bug in sigaction The bug would allow the user to block non-blockable signals (SIGKILL and SIGSTOP) using sigaction syscall. This commit fixes this bug. --- src/libos/src/signal/sig_action.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libos/src/signal/sig_action.rs b/src/libos/src/signal/sig_action.rs index 68b8c7fd..5d5528a1 100644 --- a/src/libos/src/signal/sig_action.rs +++ b/src/libos/src/signal/sig_action.rs @@ -31,7 +31,14 @@ impl SigAction { handler_addr: sa_c.handler as usize, flags: SigActionFlags::from_u32(sa_c.flags)?, restorer_addr: sa_c.restorer as usize, - mask: SigSet::from_c(sa_c.mask), + mask: { + let mut mask = SigSet::from_c(sa_c.mask); + // According to man pages, "it is not possible to block SIGKILL or SIGSTOP. + // Attempts to do so are silently ignored." + mask -= SIGKILL; + mask -= SIGSTOP; + mask + }, }, }; Ok(sa)