Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933739AbbDIJCl (ORCPT ); Thu, 9 Apr 2015 05:02:41 -0400 Received: from terminus.zytor.com ([198.137.202.10]:51793 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754878AbbDIJCf (ORCPT ); Thu, 9 Apr 2015 05:02:35 -0400 Date: Thu, 9 Apr 2015 02:01:55 -0700 From: tip-bot for Denys Vlasenko Message-ID: Cc: tglx@linutronix.de, dvlasenk@redhat.com, fweisbec@gmail.com, linux-kernel@vger.kernel.org, keescook@chromium.org, mingo@kernel.org, rostedt@goodmis.org, hpa@zytor.com, wad@chromium.org, brgerst@gmail.com, oleg@redhat.com, luto@amacapital.net, ast@plumgrid.com, bp@alien8.de, torvalds@linux-foundation.org Reply-To: ast@plumgrid.com, torvalds@linux-foundation.org, bp@alien8.de, luto@amacapital.net, oleg@redhat.com, brgerst@gmail.com, wad@chromium.org, linux-kernel@vger.kernel.org, fweisbec@gmail.com, dvlasenk@redhat.com, tglx@linutronix.de, rostedt@goodmis.org, hpa@zytor.com, keescook@chromium.org, mingo@kernel.org In-Reply-To: <1428439424-7258-1-git-send-email-dvlasenk@redhat.com> References: <1428439424-7258-1-git-send-email-dvlasenk@redhat.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] x86/asm/entry/64: Use common code for rt_sigreturn( ) epilogue Git-Commit-ID: 31f0119b817f6474a7b4c48fed7588af1b62c543 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2894 Lines: 86 Commit-ID: 31f0119b817f6474a7b4c48fed7588af1b62c543 Gitweb: http://git.kernel.org/tip/31f0119b817f6474a7b4c48fed7588af1b62c543 Author: Denys Vlasenko AuthorDate: Tue, 7 Apr 2015 22:43:37 +0200 Committer: Ingo Molnar CommitDate: Thu, 9 Apr 2015 10:31:24 +0200 x86/asm/entry/64: Use common code for rt_sigreturn() epilogue Similarly to stub_execve, we can reuse the epilogue in stub_rt_sigreturn() and stub_x32_rt_sigreturn(). Add a comment explaining why we can't eliminage SAVE_EXTRA_REGS here. Signed-off-by: Denys Vlasenko Cc: Alexei Starovoitov Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Frederic Weisbecker Cc: H. Peter Anvin Cc: Kees Cook Cc: Linus Torvalds Cc: Oleg Nesterov Cc: Steven Rostedt Cc: Thomas Gleixner Cc: Will Drewry Link: http://lkml.kernel.org/r/1428439424-7258-1-git-send-email-dvlasenk@redhat.com Signed-off-by: Ingo Molnar --- arch/x86/kernel/entry_64.S | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 3197f41..5252e60 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -527,12 +527,21 @@ END(stub_execveat) */ ENTRY(stub_rt_sigreturn) CFI_STARTPROC - addq $8, %rsp - DEFAULT_FRAME 0 - SAVE_EXTRA_REGS + DEFAULT_FRAME 0, 8 + /* + * SAVE_EXTRA_REGS result is not normally needed: + * sigreturn overwrites all pt_regs->GPREGS. + * But sigreturn can fail (!), and there is no easy way to detect that. + * To make sure RESTORE_EXTRA_REGS doesn't restore garbage on error, + * we SAVE_EXTRA_REGS here. + */ + SAVE_EXTRA_REGS 8 call sys_rt_sigreturn - movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer +return_from_stub: + addq $8, %rsp + CFI_ADJUST_CFA_OFFSET -8 RESTORE_EXTRA_REGS + movq %rax,RAX(%rsp) jmp int_ret_from_sys_call CFI_ENDPROC END(stub_rt_sigreturn) @@ -540,13 +549,10 @@ END(stub_rt_sigreturn) #ifdef CONFIG_X86_X32_ABI ENTRY(stub_x32_rt_sigreturn) CFI_STARTPROC - addq $8, %rsp - DEFAULT_FRAME 0 - SAVE_EXTRA_REGS + DEFAULT_FRAME 0, 8 + SAVE_EXTRA_REGS 8 call sys32_x32_rt_sigreturn - movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer - RESTORE_EXTRA_REGS - jmp int_ret_from_sys_call + jmp return_from_stub CFI_ENDPROC END(stub_x32_rt_sigreturn) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/