From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: [PATCH 3/6] avr32: fix handling of blocked signals Date: Tue, 28 Sep 2010 03:57:42 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Return-path: Sender: linux-kernel-owner@vger.kernel.org To: hans-christian.egtvedt@atmel.com Cc: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org List-Id: linux-arch.vger.kernel.org We do _not_ want to block anything on failure to set sigframe up and we do not want to ignore sa_mask even when SA_NODOFER is set. Signed-off-by: Al Viro --- arch/avr32/kernel/signal.c | 26 +++++++++++--------------- 1 files changed, 11 insertions(+), 15 deletions(-) diff --git a/arch/avr32/kernel/signal.c b/arch/avr32/kernel/signal.c index 8c481fb..52affae 100644 --- a/arch/avr32/kernel/signal.c +++ b/arch/avr32/kernel/signal.c @@ -231,28 +231,24 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, /* * Set up the stack frame */ - ret = setup_rt_frame(sig, ka, info, oldset, regs); + if (setup_rt_frame(sig, ka, info, oldset, regs) != 0) + goto fail; /* * Check that the resulting registers are sane */ - ret |= !valid_user_regs(regs); + if (!valid_user_regs(regs)) + goto fail; - /* - * Block the signal if we were unsuccessful. - */ - if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) { - spin_lock_irq(¤t->sighand->siglock); - sigorsets(¤t->blocked, ¤t->blocked, - &ka->sa.sa_mask); + spin_lock_irq(¤t->sighand->siglock); + sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); + if (!(ka->sa.sa_flags & SA_NODEFER)) sigaddset(¤t->blocked, sig); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - } - - if (ret == 0) - return; + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + return; +fail: force_sigsegv(sig, current); } -- 1.5.6.5