From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933057AbdKOWGr (ORCPT ); Wed, 15 Nov 2017 17:06:47 -0500 Received: from mail-io0-f193.google.com ([209.85.223.193]:41171 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932766AbdKOWGR (ORCPT ); Wed, 15 Nov 2017 17:06:17 -0500 X-Google-Smtp-Source: AGs4zMankPV59Ib9E8MERzx/k+EpXjGONpw3CSE1MM6UlMvm9i352EvuYm3GDmcCquU8mjYD+CEdzQ== From: Mark Salyzyn To: linux-kernel@vger.kernel.org Cc: Kevin Brodsky , Mark Salyzyn , Catalin Marinas , Will Deacon , Dave Martin , "Eric W. Biederman" , linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/6] arm64: compat: Use vDSO sigreturn trampolines if available Date: Wed, 15 Nov 2017 14:05:11 -0800 Message-Id: <20171115220529.14458-2-salyzyn@android.com> X-Mailer: git-send-email 2.15.0.448.gf294e3d99a-goog In-Reply-To: <20171115220529.14458-1-salyzyn@android.com> References: <20171115220529.14458-1-salyzyn@android.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kevin Brodsky If the compat vDSO is enabled, it replaces the sigreturn page. Therefore, we use the sigreturn trampolines the vDSO provides instead. Signed-off-by: Kevin Brodsky Signed-off-by: Mark Salyzyn Cc: Catalin Marinas Cc: Will Deacon Cc: Dave Martin Cc: "Eric W. Biederman" Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org --- arch/arm64/include/asm/vdso.h | 3 +++ arch/arm64/kernel/signal32.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/arch/arm64/include/asm/vdso.h b/arch/arm64/include/asm/vdso.h index 839ce0031bd5..f2a952338f1e 100644 --- a/arch/arm64/include/asm/vdso.h +++ b/arch/arm64/include/asm/vdso.h @@ -28,6 +28,9 @@ #ifndef __ASSEMBLY__ #include +#ifdef CONFIG_VDSO32 +#include +#endif #define VDSO_SYMBOL(base, name) \ ({ \ diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index 4f0c0aa14cba..37095782622d 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c @@ -28,6 +28,7 @@ #include #include #include +#include struct compat_vfp_sigframe { compat_ulong_t magic; @@ -433,6 +434,19 @@ static void compat_setup_return(struct pt_regs *regs, struct k_sigaction *ka, retcode = ptr_to_compat(ka->sa.sa_restorer); } else { /* Set up sigreturn pointer */ +#ifdef CONFIG_VDSO32 + void *vdso_base = current->mm->context.vdso; + void *trampoline = + (ka->sa.sa_flags & SA_SIGINFO + ? (thumb + ? VDSO_SYMBOL(vdso_base, compat_rt_sigreturn_thumb) + : VDSO_SYMBOL(vdso_base, compat_rt_sigreturn_arm)) + : (thumb + ? VDSO_SYMBOL(vdso_base, compat_sigreturn_thumb) + : VDSO_SYMBOL(vdso_base, compat_sigreturn_arm))); + + retcode = ptr_to_compat(trampoline) + thumb; +#else void *sigreturn_base = current->mm->context.vdso; unsigned int idx = thumb << 1; @@ -440,6 +454,7 @@ static void compat_setup_return(struct pt_regs *regs, struct k_sigaction *ka, idx += 3; retcode = ptr_to_compat(sigreturn_base) + (idx << 2) + thumb; +#endif } regs->regs[0] = usig; -- 2.15.0.448.gf294e3d99a-goog