From: ebiederm@xmission.com (Eric W. Biederman)
To: Andi Kleen <ak@suse.de>
Cc: Magnus Damm <magnus@valinux.co.jp>,
fastboot@lists.osdl.org, linux-kernel@vger.kernel.org
Subject: [PATCH] x86_64: Reload CS when startup_64 is used.
Date: Tue, 22 Aug 2006 02:37:44 -0600 [thread overview]
Message-ID: <m1y7thqi7b.fsf_-_@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <200608221003.12608.ak@suse.de> (Andi Kleen's message of "Tue, 22 Aug 2006 10:03:12 +0200")
In long mode the %cs is largely a relic. However there are a few cases
like lret where it matters that we have a valid value. Without this
patch it is possible to enter the kernel in startup_64 without setting
%cs to a valid value. With this patch we don't care what %cs value
we enter the kernel with, so long as the cs shadow register indicates
it is a privileged code segment.
Thanks to Magnus Damm for finding this problem and posting the
first workable patch. I have moved the jump to set %cs down a
few instructions so we don't need to take an extra jump. Which
keeps the code simpler.
Signed-of-by: Eric W. Biederman <ebiederm@xmission.com>
---
arch/x86_64/kernel/head.S | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S
index 923f080..6c89f6a 100644
--- a/arch/x86_64/kernel/head.S
+++ b/arch/x86_64/kernel/head.S
@@ -186,10 +186,13 @@ #define CR0_PAGING (1<<31)
/* Finally jump to run C code and to be on real kernel address
* Since we are running on identity-mapped space we have to jump
* to the full 64bit address , this is only possible as indirect
- * jump
+ * jump. In addition we need to ensure %cs is set so we make this
+ * a far return.
*/
movq initial_code(%rip),%rax
- jmp *%rax
+ pushq $__KERNEL_CS
+ pushq %rax
+ lretq
/* SMP bootup changes these two */
.align 8
next prev parent reply other threads:[~2006-08-22 8:38 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-21 9:54 [PATCH][RFC] " Magnus Damm
2006-08-21 10:19 ` Andi Kleen
2006-08-21 13:29 ` [Fastboot] " Magnus Damm
2006-08-21 14:16 ` Andi Kleen
2006-08-22 0:47 ` Magnus Damm
2006-08-21 14:17 ` Vivek Goyal
2006-08-21 14:24 ` Andi Kleen
2006-08-21 14:46 ` Vivek Goyal
2006-08-21 15:04 ` Andi Kleen
2006-08-21 20:02 ` Eric W. Biederman
2006-08-21 20:10 ` Andi Kleen
2006-08-21 21:00 ` Eric W. Biederman
2006-08-21 21:02 ` Eric W. Biederman
2006-08-22 0:58 ` Magnus Damm
2006-08-22 3:41 ` Eric W. Biederman
2006-08-22 4:10 ` Magnus Damm
2006-08-22 8:03 ` Andi Kleen
2006-08-22 8:37 ` Eric W. Biederman [this message]
2006-08-22 8:53 ` [Fastboot] [PATCH] " Magnus Damm
2006-08-22 9:25 ` Eric W. Biederman
2006-08-23 3:10 ` Magnus Damm
2006-08-22 9:01 ` Andi Kleen
2006-08-22 9:20 ` Eric W. Biederman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1y7thqi7b.fsf_-_@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=ak@suse.de \
--cc=fastboot@lists.osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=magnus@valinux.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome