From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760265AbcJTLMi (ORCPT ); Thu, 20 Oct 2016 07:12:38 -0400 Received: from terminus.zytor.com ([198.137.202.10]:39674 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755137AbcJTLMg (ORCPT ); Thu, 20 Oct 2016 07:12:36 -0400 Date: Thu, 20 Oct 2016 04:11:45 -0700 From: tip-bot for Josh Poimboeuf Message-ID: Cc: nilayvaish@gmail.com, luto@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org, bp@alien8.de, torvalds@linux-foundation.org, brgerst@gmail.com, tglx@linutronix.de, jpoimboe@redhat.com, dvlasenk@redhat.com, peterz@infradead.org, mingo@kernel.org Reply-To: torvalds@linux-foundation.org, tglx@linutronix.de, brgerst@gmail.com, linux-kernel@vger.kernel.org, bp@alien8.de, jpoimboe@redhat.com, mingo@kernel.org, peterz@infradead.org, dvlasenk@redhat.com, nilayvaish@gmail.com, hpa@zytor.com, luto@kernel.org In-Reply-To: References: To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] x86/boot/64: Put a real return address on the idle task stack Git-Commit-ID: 595c1e645d9fd8561104b5680931f68a429aaa1c 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 Commit-ID: 595c1e645d9fd8561104b5680931f68a429aaa1c Gitweb: http://git.kernel.org/tip/595c1e645d9fd8561104b5680931f68a429aaa1c Author: Josh Poimboeuf AuthorDate: Wed, 21 Sep 2016 16:04:05 -0500 Committer: Ingo Molnar CommitDate: Thu, 20 Oct 2016 09:15:23 +0200 x86/boot/64: Put a real return address on the idle task stack The frame at the end of each idle task stack has a zeroed return address. This is inconsistent with real task stacks, which have a real return address at that spot. This inconsistency can be confusing for stack unwinders. It also hides useful information about what asm code was involved in calling into C. Make it a real address by using the side effect of a call instruction to push the instruction pointer on the stack. Signed-off-by: Josh Poimboeuf Reviewed-by: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Nilay Vaish Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/f59593ae7b15d5126f872b0a23143173d28aa32d.1474480779.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar --- arch/x86/kernel/head_64.S | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 3631777..1c5e5db 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -299,8 +299,9 @@ ENTRY(start_cpu) * REX.W + FF /5 JMP m16:64 Jump far, absolute indirect, * address given in m16:64. */ - movq initial_code(%rip),%rax - pushq $0 # fake return address to stop unwinder + call 1f # put return address on stack for unwinder +1: xorq %rbp, %rbp # clear frame pointer + movq initial_code(%rip), %rax pushq $__KERNEL_CS # set correct cs pushq %rax # target address in negative space lretq