From patchwork Wed Sep 8 20:44:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 12481819 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF857C433F5 for ; Wed, 8 Sep 2021 20:45:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D563461157 for ; Wed, 8 Sep 2021 20:45:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350544AbhIHUrA (ORCPT ); Wed, 8 Sep 2021 16:47:00 -0400 Received: from mout.gmx.net ([212.227.15.18]:57223 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350507AbhIHUrA (ORCPT ); Wed, 8 Sep 2021 16:47:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1631133943; bh=gQ92j+eFefii+Grc3pfyMM+VWOEAUseqpOeE+AQtd4g=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=MoT7ncvPs1iuXWajCTwx1Bler5LzkgCiWK4wCiTJhy+ugOEazGIYHEQg3sWCMYwQG i2Bf2wflAwUAyPy7DXyrLi4bxQr2L01TgmNREG5I8BLyg5EkVYZyK5PwVfk+OjIrbC MMnp9DlRFcZIG0U50AiBV82nS2zxoqx1w2zfIPUA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([80.187.121.129]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MeU4s-1myVf83SwW-00aX83; Wed, 08 Sep 2021 22:45:43 +0200 From: Helge Deller To: linux-parisc@vger.kernel.org Cc: James Bottomley , John David Anglin , Arnd Bergmann Subject: [PATCH 1/4] parisc: Drop strnlen_user() in favour of generic version Date: Wed, 8 Sep 2021 22:44:02 +0200 Message-Id: <20210908204405.127665-1-deller@gmx.de> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Provags-ID: V03:K1:uiqlyHoS/WBnLltSwVv+6DhbKuWF5IX4RFrTeYTMhEoHnTBwHU7 gbAx/z9tlFq0QDOwHxqK4WaODetYaq6mn+L0lP/q2dWAcq1pjCLQikSioIjGKInLpGOatoZ XP1G7XR2OwwjOSyTVCH4R1w0emuq4mqvbUXBC4+VdW6Mr3GO8n/G4FQVbllPHuVGV7OogLA Uuzj7hmZr+OWh4VFF7yVg== X-UI-Out-Filterresults: notjunk:1;V03:K0:ICiw4KEzSVg=:3UO4c6LzvJ2ZInZiL/oVx2 rIPuvHfso/pwdxcUOSXbU2ZK4fmTT3ooo00VLy3QPurjpJAQEWEIv163lBTJs9k41tEN8rh5Z 3DjQqN2yC5CEETHiPfZvB2A//L5j/YSlzNTE1iWxfVtKxip0qK8d2epNeZk3fIBvzXmXqqxyT TvwclVhV+tF9jt9MKwGYOBCvKNv7dh5Z3F9FkBTNIxu4atkSJZbKDtRNTu6P+GtV8pQWlrLwM O7ZJSfIcNJn81bZgmi4YOAaiNY1PDoxvbkyaDVNvhNVTk6mcAO2b8TyeCo8hBTKseCQaCJTsg YLU3yOwKdwF0UM13o1XhTjmSqb41vKg0DeisFF8rW3SQUX+eTKFQPZtYqon9p5WpO4wnXsF8/ L8mnnJBDNW+bDreaLJvERY0VKhUJhcZTzNdP0Zx4X4GQaVNe1aKt2z9eT1nGCYZWfEJds1jti 0Fm6DM3fB0yHhqRcYHq/ERiNzQEEZd3PMtT3hf5ugDreE6J18+XCqY811wKjqwO240EJnWcUX f/NgfYFCNhC3Nmep8+tpLxdIbUqg8ZrU6Q0ZnmuNdJOHF73iMtCI332vBRGKRcKQR8HtVqs5E rbq/R7fO3icLahkuyNnM9+OpcegTfZHoGKL1kfTnPlYaVFhWKl+Ww951lL7C05CCMfl4yiztV X0QfVx/tZrjEAr9Y62/1rPgJALvzv9KbaX8xwN8tKt6FDNrbg4d3Ax7mmi1x/qTMLR29rnocs zKxAupFKXJ1savMIgKR1df9F0/RchDA+kBQiYREDCIrk1bIg/Ae+svIHVCdhqZi/Eg7bt0qDf 02pGsxnhXO9V2hYmW2vAcucMRjikUbWrLGsZays0InHi2p9IvfYQRmuigvkBMC3rzzxVPWJjt m3mXedu2ToRZVWYJASqEdPTW2BbaNZ9rd405RaPFpaukY7NptIm+Sr/dL+2R5/sK6Dmu1fpe1 cINilJxiKUHIk9VcuFdkTnZMiV+XTbjMRpv6NIiCLLSCuxsxbqaiXB07ByhldLwsoAsvMvfOj EKddPUvA5DQIvj/77ty0S7JdgOErqIVv8dzURDrMbKyaxnH/F6DaSQNXXZQaF6jKcWgD47ZmB ZhzpiLXd9XhuKU= Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org As suggested by Arnd Bergmann, drop the parisc version of strnlen_user() and switch to the generic version. user_addr_max() was wrong too, fix it by using TASK_SIZE. Suggested-by: Arnd Bergmann Signed-off-by: Helge Deller Acked-by: Arnd Bergmann Signed-off-by: Helge Deller --- arch/parisc/Kconfig | 1 - arch/parisc/include/asm/uaccess.h | 5 ++--- arch/parisc/kernel/parisc_ksyms.c | 1 - arch/parisc/lib/lusercopy.S | 34 ------------------------------- 4 files changed, 2 insertions(+), 39 deletions(-) -- 2.31.1 diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 95d4bbf4e455..3ae71994399c 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -10,7 +10,6 @@ config PARISC select ARCH_HAS_ELF_RANDOMIZE select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_UBSAN_SANITIZE_ALL - select ARCH_HAS_STRNLEN_USER select ARCH_NO_SG_CHAIN select ARCH_SUPPORTS_HUGETLBFS if PA20 select ARCH_SUPPORTS_MEMORY_FAILURE diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h index ed2cd4fb479b..2442ed2929ae 100644 --- a/arch/parisc/include/asm/uaccess.h +++ b/arch/parisc/include/asm/uaccess.h @@ -201,13 +201,12 @@ struct exception_table_entry { extern long strncpy_from_user(char *, const char __user *, long); extern unsigned lclear_user(void __user *, unsigned long); -extern long lstrnlen_user(const char __user *, long); +extern __must_check long strnlen_user(const char __user *src, long n); /* * Complex access routines -- macros */ -#define user_addr_max() (~0UL) +#define user_addr_max() (uaccess_kernel() ? ~0UL : TASK_SIZE) -#define strnlen_user lstrnlen_user #define clear_user lclear_user #define __clear_user lclear_user diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index e8a6a751dfd8..00297e8e1c88 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c @@ -32,7 +32,6 @@ EXPORT_SYMBOL(__xchg64); #include EXPORT_SYMBOL(lclear_user); -EXPORT_SYMBOL(lstrnlen_user); #ifndef CONFIG_64BIT /* Needed so insmod can set dp value */ diff --git a/arch/parisc/lib/lusercopy.S b/arch/parisc/lib/lusercopy.S index 36d6a8638ead..0aad5ce89f4d 100644 --- a/arch/parisc/lib/lusercopy.S +++ b/arch/parisc/lib/lusercopy.S @@ -67,40 +67,6 @@ $lclu_done: ENDPROC_CFI(lclear_user) - /* - * long lstrnlen_user(char *s, long n) - * - * Returns 0 if exception before zero byte or reaching N, - * N+1 if N would be exceeded, - * else strlen + 1 (i.e. includes zero byte). - */ - -ENTRY_CFI(lstrnlen_user) - comib,= 0,%r25,$lslen_nzero - copy %r26,%r24 - get_sr -1: ldbs,ma 1(%sr1,%r26),%r1 -$lslen_loop: - comib,=,n 0,%r1,$lslen_done - addib,<> -1,%r25,$lslen_loop -2: ldbs,ma 1(%sr1,%r26),%r1 -$lslen_done: - bv %r0(%r2) - sub %r26,%r24,%r28 - -$lslen_nzero: - b $lslen_done - ldo 1(%r26),%r26 /* special case for N == 0 */ - -3: b $lslen_done - copy %r24,%r26 /* reset r26 so 0 is returned on fault */ - - ASM_EXCEPTIONTABLE_ENTRY(1b,3b) - ASM_EXCEPTIONTABLE_ENTRY(2b,3b) - -ENDPROC_CFI(lstrnlen_user) - - /* * unsigned long pa_memcpy(void *dstp, const void *srcp, unsigned long len) * From patchwork Wed Sep 8 20:44:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 12481817 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9B83C433FE for ; Wed, 8 Sep 2021 20:45:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9DE1C60E97 for ; Wed, 8 Sep 2021 20:45:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350509AbhIHUq6 (ORCPT ); Wed, 8 Sep 2021 16:46:58 -0400 Received: from mout.gmx.net ([212.227.15.15]:58937 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350507AbhIHUq5 (ORCPT ); Wed, 8 Sep 2021 16:46:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1631133943; bh=8d7ZSLcb7d0TOxgCagafc+5WDsH8LCwEDmhoEPyeGnM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=Bt4ejq5wgReZ1e9lWBf7G79CTFZKtVjYeM1cCv1LXl7oTFj62/qQ0w0D3ACodrlIu EQ2qYRT1GA646m9GINbqduOBNbGw4ah00EBiuZZ2uMWXVwfj439sgyPcR0GsRBKAut zFjhlONKRYeocF5CLfH6gIKmziZvHxhaPHG4jclo= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([80.187.121.129]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mwfai-1n93EL1AJW-00y5Jx; Wed, 08 Sep 2021 22:45:43 +0200 From: Helge Deller To: linux-parisc@vger.kernel.org Cc: James Bottomley , John David Anglin Subject: [PATCH 2/4] parisc: Drop useless debug info and comments from signal.c Date: Wed, 8 Sep 2021 22:44:03 +0200 Message-Id: <20210908204405.127665-2-deller@gmx.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210908204405.127665-1-deller@gmx.de> References: <20210908204405.127665-1-deller@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:+YzxvjwDUf2zjXTJdyHyOUPefo99TLZWmsmsl/wJHrp0qFSTr1N yrtr3ihRZDsQ2yS6HgyuqOQYURsVn62cg6h48uImWq1YAORF9+6xLC8dNaDVo15sNdrKAlH 5Ur2HfRy77wEOzrYrv0+DAQJ3EuWAs6zTwd3ImTAAlEgl/KailDDYUDL3uvraJ6qC//dbM+ cX7Ml3azXwenIcg+Mfi2g== X-UI-Out-Filterresults: notjunk:1;V03:K0:M5AiObE1Lh0=:RNa7z1PrHj+hU7GjHFCpEV mxHouNqizNzuPlwGANnIr4FxhCxA4D83F8dTlYquc+yDGgHPU6Bd5VUNxWa4D4Wth7X8sli3C U4/8yPcM1T96iTlrisFaJXB+m/H+ByTN9jom7N+iV3QKPirStm/spmCbVAZfIjwj94rIC0VXZ bFE1qtjCJusV/9no2afKCLaEzIKYbl2cmAvHop184BeLrDEluYokmu9aG1WP75ud8IOC+s9Ff z3+v+QCl1SrW/qUhsWw7CwGmuZiPhkJyTbMdHviGA9823ifuGTG18TzCS04OTMAwPLNh3FgG8 ma36+UsEEeQPECP+re8nTONWdrtDtKJnS10JXwJn7xJfgYEkVJyC7LBdFTI7tUhlEjlyemvDv MbKXETNGr2q/+luvTrwQUEImh/vwDYBNKmb/zvmHAddSS2TVvCRPG7im+3JXFCQ+htVmIGD7I 6fZVRX5yy0Auq8LE1wwi2KHSwWz91vaBCkVfunTEiHE+0HAxDrJiI9JV28HbJfsuBA+S6ZOIu yNov/xXU+6MuFXK8j1T1vQ1G9uMJ62MoizWsXsa3R6eE62SRRBUMg67/E2PX+46t9baNotv6T iU5WdsaDdCmsSuxe3fEYv0n7sFvwsnyNCcI2fOB3y3H9qX6IvD+HOlFGWfOPAblheTtkqHz5n aIh9skdPe2811OTd8jTW2lDNA/FDPwkh8BP0qpCcyp4c5dOcoiROSbAwzUvllCQFNIx3mfmli FAfCFqhcidFkW+QPPGnldbf6KRDOCSHwZEppVNhlmM6yYSNt30mfBO+CaH2N0TSErRVM8t/Av auWlImAfijEaHhXVzFF7lm2QSaOW3WN7JsSbqN81GqpumLa5MiKdvZbhNSExCz23JRug8TdpM V6rtqZ7q7++R8T68xuUm4R3g6B8ggnDs/cQwgfcbcPsgazDRbaaeFkgKrrzrGXtop5JUSIOWW g1Tkw5hQzRojuMLkr8+gjUOHM8kIt7Nc1Q+WkeR57HWrnKsh4qc7pB40LMnfQCeNeQgu3v9Pe hNi0zB4toAeS/zx+vaC6ljUjLSzqncm0K+WuK7l/osgUIE8RUB9ChQIYtFKm5/UTAr+6VjUuo M9t6XLDbRZrHks= Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org Signed-off-by: Helge Deller --- arch/parisc/kernel/signal.c | 15 --------------- 1 file changed, 15 deletions(-) -- 2.31.1 diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index db1a47cf424d..77db707ce391 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -293,16 +293,6 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); -#if DEBUG_SIG - /* Assert that we're flushing in the correct space... */ - { - unsigned long sid; - asm ("mfsp %%sr3,%0" : "=r" (sid)); - DBG(1,"setup_rt_frame: Flushing 64 bytes at space %#x offset %p\n", - sid, frame->tramp); - } -#endif - start = (unsigned long) &frame->tramp[0]; end = (unsigned long) &frame->tramp[TRAMP_SIZE]; flush_user_dcache_range_asm(start, end); @@ -501,7 +491,6 @@ syscall_restart(struct pt_regs *regs, struct k_sigaction *ka) DBG(1,"ERESTARTNOHAND: returning -EINTR\n"); regs->gr[28] = -EINTR; break; - case -ERESTARTSYS: if (!(ka->sa.sa_flags & SA_RESTART)) { DBG(1,"ERESTARTSYS: putting -EINTR\n"); @@ -569,10 +558,6 @@ insert_restart_trampoline(struct pt_regs *regs) } /* - * Note that 'init' is a special process: it doesn't get signals it doesn't - * want to handle. Thus you cannot kill init even with a SIGKILL even by - * mistake. - * * We need to be able to restore the syscall arguments (r21-r26) to * restart syscalls. Thus, the syscall path should save them in the * pt_regs structure (it's okay to do so since they are caller-save From patchwork Wed Sep 8 20:44:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 12481815 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 619F8C433EF for ; Wed, 8 Sep 2021 20:45:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 48BF360E97 for ; Wed, 8 Sep 2021 20:45:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229677AbhIHUq5 (ORCPT ); Wed, 8 Sep 2021 16:46:57 -0400 Received: from mout.gmx.net ([212.227.15.18]:47541 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350500AbhIHUq5 (ORCPT ); Wed, 8 Sep 2021 16:46:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1631133944; bh=oleUJEp3qwab6kRV5fWkcTrpoVJGGEVmRhHvZ9xHLy8=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=GnkCTkkH99M7B0/lUInkoOMkJrXpg/hhsEFWb6XHgXvPjaLFySnTyUjVdfFqjT6Cl /iDOCVL5J6T7gazZft3L7XaJFu52kBNQZ5ziux0gIOyozh6QK6fDu2nJK6UMfNWbty HQJVhZJTmZIHGNXms6D9FJDotWACcHq6GHSjFl3k= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([80.187.121.129]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1My32L-1n9si02yfH-00zSto; Wed, 08 Sep 2021 22:45:43 +0200 From: Helge Deller To: linux-parisc@vger.kernel.org Cc: James Bottomley , John David Anglin Subject: [PATCH 3/4] parisc: Check user signal stack trampoline is inside TASK_SIZE Date: Wed, 8 Sep 2021 22:44:04 +0200 Message-Id: <20210908204405.127665-3-deller@gmx.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210908204405.127665-1-deller@gmx.de> References: <20210908204405.127665-1-deller@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:V/1VhKY3haZBsyg+3kJn3NEcEkH4SgUd/crT/BAwgZAfZIHiGLd O45lkSMVq6zxvh+VPiE8NPXsbGN2H+DwLhYUIRLhi1iqRqLH3uOD6L+5dfUn5M94i6DHHqt mAho32TTKR+eRW5bYdyiZKYBRLWOA8ZQAgnMk97vvSfcjo7Lzi/K/7dT8LQsNeWpZdVUaLQ fuGDBTLBIBndUMzIWlZGw== X-UI-Out-Filterresults: notjunk:1;V03:K0:28bvDR+vy7A=:mvXKwy+u1U/4mFs0d1P/sp FqUZwfxt1WLYfLosiLFQrHiLi0den7jAW88pHHT4AXHdRHJiYOdb4p++zajpmmPmF6m7wXN62 5Eh65aK1ztbr+VOhqw5F87pl9BRujIrw9OlJCAYTFI4wsR1B4oeOjv3yBjmg3K49lQCtRisfF I+14Wf0T7DF4WiGalnzrxu7+eUpxDeQdfhGLYMjlddEn5PW4KW9pjmv78GPTJLiDbFcsaQ6zY mkwN5mGtdDhUHQCSyD76Ow+M3aIwKSG3ZPrErSWCXcXGXmbMP61S7dHwA/zyrIr1FJxtd96LQ GqUz/VkiDhvEAYch6byw1+0cNfPO8qErL4WfOqEN3/PIYnWjOGELewYHJcerV/4ddIcwH1Bp/ vNfV7PKO9fVQ84CBnd0wGP2aIaUzIUHU9JsXEgVRz7XtmIM/nVwT31HJREYY3GRZ5U46xnSSY lwUFsR6870UMAuAO7XlJJvBHfFnnSR4EUpxwwxIXBMUhDloSwpBeMemn2w1dzr7/xn+jyhqrA 8/GS8KLZ4g8yGhjD6ldAtUhePpRlZbXxzLsQCaNa1qNaT4JokgBKWVSH9DdzhnOO7bGjp/NGW tm9Mhm6ltL8T6D1NwG1Yv742Z67LQZBm0QcubkOvnrQEBFJSMDCEEKrKyLdDzgC3gsJI038v6 SGgvuL193YglPQ1lsLMabhWunlrLJDbLR6gzn2cCcFzSbWkL7A5oGMn88F4XodvrsB+KPQIgh Eh4lBG87DiB/Vt0vKz2JXoUv1qn4ZyOwgNQtz41tY1QGjqZ9rplnl5eWGvac7Ihiyaldaskt8 9VjEuG+EliSu2OVjN5Nq97JykQPYgqwTOQWA+HGRyBqBSDkYv/HF2Qr89x2ceMe1GPfDP4zK5 RSKbTQpDYtSB4xrN77EiVn1QGrk3mWWrMwDVGqJ+HyLdwW9Zcdoon1Fc5OzRpmpckEmoLrNwp mFH2iaP9FQKFx/qFZAXgP62dSiS0NGLIqdN85ziARosWx3ah4i/WUVuQeTI2kwB2fhITPY3i1 d+03tKdsMH8crqSUZ14nG5lj4JDvswe5v/0RosAQOLVW9F4um+OaC+7ZP26EMJ6uugj+IpA7t 32B8nhI3/ebXHs= Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org Add some additional checks to ensure the signal stack is inside userspace bounds. Signed-off-by: Helge Deller --- arch/parisc/kernel/signal.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) -- 2.31.1 diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 77db707ce391..46b1050640b8 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -237,18 +237,22 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, #endif usp = (regs->gr[30] & ~(0x01UL)); + sigframe_size = PARISC_RT_SIGFRAME_SIZE; #ifdef CONFIG_64BIT if (is_compat_task()) { /* The gcc alloca implementation leaves garbage in the upper 32 bits of sp */ usp = (compat_uint_t)usp; + sigframe_size = PARISC_RT_SIGFRAME_SIZE32; } #endif - /*FIXME: frame_size parameter is unused, remove it. */ - frame = get_sigframe(&ksig->ka, usp, sizeof(*frame)); + frame = get_sigframe(&ksig->ka, usp, sigframe_size); DBG(1,"SETUP_RT_FRAME: START\n"); DBG(1,"setup_rt_frame: frame %p info %p\n", frame, ksig->info); + start = (unsigned long) frame; + if (start >= user_addr_max() - sigframe_size) + return -EFAULT; #ifdef CONFIG_64BIT @@ -343,11 +347,6 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, /* The syscall return path will create IAOQ values from r31. */ - sigframe_size = PARISC_RT_SIGFRAME_SIZE; -#ifdef CONFIG_64BIT - if (is_compat_task()) - sigframe_size = PARISC_RT_SIGFRAME_SIZE32; -#endif if (in_syscall) { regs->gr[31] = haddr; #ifdef CONFIG_64BIT @@ -518,6 +517,10 @@ insert_restart_trampoline(struct pt_regs *regs) unsigned long end = (unsigned long) &usp[5]; long err = 0; + /* check that we don't exceed the stack */ + if (A(&usp[0]) >= user_addr_max() - 5 * sizeof(int)) + return; + /* Setup a trampoline to restart the syscall * with __NR_restart_syscall * From patchwork Wed Sep 8 20:44:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 12481813 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 918CDC433F5 for ; Wed, 8 Sep 2021 20:45:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 72C056115B for ; Wed, 8 Sep 2021 20:45:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350500AbhIHUq6 (ORCPT ); Wed, 8 Sep 2021 16:46:58 -0400 Received: from mout.gmx.net ([212.227.15.18]:33869 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350509AbhIHUq5 (ORCPT ); Wed, 8 Sep 2021 16:46:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1631133944; bh=kd7gPk+eIrr2D3SXV0PRWz8e7NH4O/pJiuNTbD7HvHU=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=CPasY0R97HiU4lcrAsdYtHQjZOHCWrVwMQFohSFbbnOnz7rdAVAz8MdoSu0/lQkm7 KNOecmw5jSSFTTMOBu8x1u/40Qox/9lb0b/DTnUV43ZsLExCxEd+qJ5b7YVW9kCBxz N1Gxi5yLsP+7LY89kzZ9ayr/4vXEHCZYAWI/r6M8= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([80.187.121.129]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MvbFs-1nGjGw0cTe-00scD7; Wed, 08 Sep 2021 22:45:44 +0200 From: Helge Deller To: linux-parisc@vger.kernel.org Cc: James Bottomley , John David Anglin Subject: [PATCH 4/4] parisc: Reduce sigreturn trampoline to 3 instructions Date: Wed, 8 Sep 2021 22:44:05 +0200 Message-Id: <20210908204405.127665-4-deller@gmx.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210908204405.127665-1-deller@gmx.de> References: <20210908204405.127665-1-deller@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:2nffwEEyUtkR3Vvd6T2HVqBWamT8+fqkYiApU6/m7UK5OotzAxS SA+q+L95vfn5MiWInDhDvmy04xOYBhCxYjsu7EwfD6bzAKe01emLRV/mAKmsBYwwUYeU9Ex WTldxNP5kHRCDIvTecVa5NsH8ZT/oC0g9N47Mkiv06ndN2zLFp5izQsb50TKBAq97cDPTIP 9ZYdxTtkH3CQofICVn4sA== X-UI-Out-Filterresults: notjunk:1;V03:K0:aWihpC8IgTU=:ByHsQ7VF8PkhO7yw9UOYRA bCzRmKEca8oKfSxd94wfu74y9iyot18TPTRO0ZWGELirELC/6tZCwlsvDNvMfBJ0XW4U7dYoC tQllV4+Umfcr7s8JcwaR89tE/Kz67/5ICyvtbZ8E4tj4EMbMMMOXa1tP7KPVo0mavAZ6KYxUh +/tUfMAfGhqDRvef/7JQ6fWtEXw3T//l5V1sV08Rzs2oVo3iqTdun8/m+Zd/XzmffnUkvHOM9 5degLr9sTvOCj/UbEaiWK19xqZe6xfjD4z4DgGShfREL7urx4BORZxQCKP9knG0ITC9lQW+51 dZ63ABTEJZ2x3IEyTu8X9zpSXbmIKKkkxTw7NcJsf+EAw5MEBTlGu9/OO83RPLumxSE6kzcWX Ao9Cd8cLvcQvBA6AesXpRvwqNFoIcClxUK7ooY0B2HplNlH5ayRD8w5afl6Hx0k+tqq39mh+P b8tttK2Tyxq0nCDJisvbsdbsQGbhMUtODsUw+WKbudkGM52WhrUD++dgQbMNXwGMd6yM62tSj b4DWnrj5+6ywSS4UWmf6oj6rloEmSrDjge/j3t9en8jmigbMjbfib1IzfB31cX4uwcxrNxzzJ w4mxJCBrXLqGtfSJ5dOkhb+K9MxDYmw09D2EAFUSW5FARlgI+MO/AO5ASb6X42/1ssG7orVvL /lsz0IbCYinXVZ0Ng4CM/XcRHLHV0uZWu5/zxhQijCgiQEZYe2ZbvsnRnmG5UFdLE56EqH4Cy pL9dWQOWEJTOtJEtTf1CpE+eiw3eOSu5i+2e1hWGU+jA9RxrzTxOJq1mgM73iXu2FTjvZ33Jc wb3uvHjZgC2X5JI3q8SCCfyy+zYtZiZz1uQjcorkBRajhLC2QRnp+ncIZytBaHgo40Gnd6WYC HiJkgV9iWwRaKe1F6kWzxRE717lbcJyuMeW4f3sHKtAXvq0BUQb7JtqB+GfefLjLl5owOsbSX z8SWCtJ6K/jTcfdKQj2TWSlA5A9PJRASXKAvsoh6E3OLOPpy6O1dupzT62BTippALf4TLBD3z 4kr4fEFDji62mS+j3bzbnetgS1Aif8E4sGBNVHxcQNpMh/pccSQfu6Np09LHK5Y4vink1KaIt ADO4s4Eg6YzuI0= Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org We can move the INSN_LDI_R20 instruction into the branch delay slot. Signed-off-by: Helge Deller --- arch/parisc/include/asm/rt_sigframe.h | 2 +- arch/parisc/kernel/signal.c | 13 ++++++------- arch/parisc/kernel/signal32.h | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) -- 2.31.1 diff --git a/arch/parisc/include/asm/rt_sigframe.h b/arch/parisc/include/asm/rt_sigframe.h index 2b3010ade00e..4b9e3d707571 100644 --- a/arch/parisc/include/asm/rt_sigframe.h +++ b/arch/parisc/include/asm/rt_sigframe.h @@ -2,7 +2,7 @@ #ifndef _ASM_PARISC_RT_SIGFRAME_H #define _ASM_PARISC_RT_SIGFRAME_H -#define SIGRETURN_TRAMP 4 +#define SIGRETURN_TRAMP 3 #define SIGRESTARTBLOCK_TRAMP 5 #define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP) diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 46b1050640b8..bbfe23c40c01 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -288,22 +288,21 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, already in userspace. The first words of tramp are used to save the previous sigrestartblock trampoline that might be on the stack. We start the sigreturn trampoline at - SIGRESTARTBLOCK_TRAMP+X. */ + SIGRESTARTBLOCK_TRAMP. */ err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0, &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]); - err |= __put_user(INSN_LDI_R20, - &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); err |= __put_user(INSN_BLE_SR2_R0, + &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); + err |= __put_user(INSN_LDI_R20, &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); - err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); - start = (unsigned long) &frame->tramp[0]; - end = (unsigned long) &frame->tramp[TRAMP_SIZE]; + start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]; + end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]; flush_user_dcache_range_asm(start, end); flush_user_icache_range_asm(start, end); /* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP - * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP + * TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP */ rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP]; diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h index f166250f2d06..a5bdbb5678b7 100644 --- a/arch/parisc/kernel/signal32.h +++ b/arch/parisc/kernel/signal32.h @@ -36,7 +36,7 @@ struct compat_regfile { compat_int_t rf_sar; }; -#define COMPAT_SIGRETURN_TRAMP 4 +#define COMPAT_SIGRETURN_TRAMP 3 #define COMPAT_SIGRESTARTBLOCK_TRAMP 5 #define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \ COMPAT_SIGRESTARTBLOCK_TRAMP)