From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757585AbcAaQVY (ORCPT ); Sun, 31 Jan 2016 11:21:24 -0500 Received: from smtp46.i.mail.ru ([94.100.177.106]:44379 "EHLO smtp46.i.mail.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757477AbcAaQVX (ORCPT ); Sun, 31 Jan 2016 11:21:23 -0500 Subject: [PATCH 2/4] score: signal: fix sigaltstack check To: Linux kernel References: <56AE3369.2090709@list.ru> Cc: Andy Lutomirski , Chen Liqin , Lennox Wu , Michael Ellerman , Andrew Morton , James Hogan From: Stas Sergeev Message-ID: <56AE347B.5020303@list.ru> Date: Sun, 31 Jan 2016 19:21:15 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <56AE3369.2090709@list.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Mras: Ok Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently get_sigframe() checks only (ka->sa.sa_flags & SA_ONSTACK) && (!on_sig_stack(sp)) to determine whether the switch to sigaltstack is needed. It forgets to checks whether the sigaltstack was previously set. This patch replaces the !on_sig_stack(sp) with the standard check sas_ss_flags(sp) == 0 that takes into account both conditions: it succeeds only if the sigaltstack is enabled but currently not active. CC: Andy Lutomirski CC: linux-kernel@vger.kernel.org CC: Chen Liqin CC: Lennox Wu CC: Michael Ellerman CC: Andrew Morton CC: James Hogan Signed-off-by: Stas Sergeev --- arch/score/kernel/signal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c index e381c8c..bd1c7c8 100644 --- a/arch/score/kernel/signal.c +++ b/arch/score/kernel/signal.c @@ -127,7 +127,7 @@ static void __user *get_sigframe(struct k_sigaction *ka, sp -= 32; /* This is the X/Open sanctioned signal stack switching. */ - if ((ka->sa.sa_flags & SA_ONSTACK) && (!on_sig_stack(sp))) + if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags(sp) == 0)) sp = current->sas_ss_sp + current->sas_ss_size; return (void __user*)((sp - frame_size) & ~7); -- 2.5.0