From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:59835) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1THzdw-0002Jm-78 for qemu-devel@nongnu.org; Sat, 29 Sep 2012 12:11:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1THzdv-0008W1-0o for qemu-devel@nongnu.org; Sat, 29 Sep 2012 12:11:52 -0400 Received: from mail-wg0-f53.google.com ([74.125.82.53]:55742) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1THzdu-0008Vx-Qi for qemu-devel@nongnu.org; Sat, 29 Sep 2012 12:11:50 -0400 Received: by wgbdr1 with SMTP id dr1so2108790wgb.10 for ; Sat, 29 Sep 2012 09:11:50 -0700 (PDT) Sender: Alex Barcelo From: Alex Barcelo Date: Sat, 29 Sep 2012 18:11:26 +0200 Message-Id: <1348935086-11336-3-git-send-email-abarcelo@ac.upc.edu> In-Reply-To: <1348935086-11336-1-git-send-email-abarcelo@ac.upc.edu> References: <1348935086-11336-1-git-send-email-abarcelo@ac.upc.edu> Subject: [Qemu-devel] [PATCH 2/2] signal: sigsegv protection on do_sigprocmask List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Riku Voipio , Alex Barcelo The sigsegv protection is done by forcing the catch (needed in qemu-user) and then taking it off from the return mask (well, adding it in fact) --- linux-user/signal.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index b8b8268..8764f57 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -5468,7 +5468,14 @@ long do_rt_sigreturn(CPUArchState *env) */ int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset) { - return sigprocmask(how, set, oldset); + int ret; + sigset_t temp = *set; + if (set) { + sigdelset(&temp, SIGSEGV); + } + ret = sigprocmask(how, &temp, oldset); + sigaddset(oldset, SIGSEGV); + return ret; } void process_pending_signals(CPUArchState *cpu_env) -- 1.7.5.4