All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Andrew Lutomirski <luto@mit.edu>
Cc: jj@chaosbits.net, linux-kernel@vger.kernel.org,
	xen-devel@lists.xensource.com, arjan@infradead.org,
	JBeulich@novell.com, richard.weinberger@gmail.com,
	mikpe@it.uu.se, andi@firstfloor.org, brgerst@gmail.com,
	Louis.Rilling@kerlabs.com, Valdis.Kletnieks@vt.edu,
	pageexec@freemail.hu, mingo@elte.hu,
	Jeremy Fitzhardinge <jeremy@goop.org>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Ian Campbell <Ian.Campbell@eu.citrix.com>
Subject: Re: git commit 9fd67b4ed0714ab718f1f9bd14c344af336a6df7 (x86-64: Give vvars their own page) breaks Xen PV guests (64-bit).
Date: Tue, 26 Jul 2011 12:18:08 -0400	[thread overview]
Message-ID: <20110726161808.GA5333@dumpdata.com> (raw)
In-Reply-To: <CAObL_7F9+Wn1DBf5te7BHoAe3CbEzR=pxTqy_S_vpkwcG57NKQ@mail.gmail.com>

> > However, this is what I get later on, any ideas?
> 
> > [    0.585880] init[1] illegal int 0xcc from 32-bit mode ip:ffffffffff600400 cs:e033 sp:7fff230ca088 ax:ffffffffff600400 si:7faee3e822bf di:7fff230ca158
> 
> That will, indeed, crash your system.
> 
> 0xe033 is FLAT_RING3_CS64
> 
> Jeremy / other Xen people:  I'm trying to implement a lightweight
> check to distinguish a trap from a sane (i.e. allowable for syscalls)
> 64-bit user context from anything else.  There seems to be precedent
> for using ->cs == __USER_CS to detect 64-bitness; for example, step.c
> contains:
> 
> #ifdef CONFIG_X86_64
>                 case 0x40 ... 0x4f:
>                         if (regs->cs != __USER_CS)
>                                 /* 32-bit mode: register increment */
>                                 return 0;
>                         /* 64-bit mode: REX prefix */
>                         continue;
> #endif
> 
> The prefetch opcode checker in mm/fault.c does something similar.
> 
> Even the sysret code in xen/xen-asm_64.S does:
> 
>         pushq %r11
>         pushq $__USER_CS
>         pushq %rcx
> 
> So I'm at a bit of a loss.
> 
> You could probably hack it up and get your kernel to boot by allowing
> __USER_CS and 0xe033 in that check, but I'd rather understand it

Did this little hack:


diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
index dda7dff..5d0cf37 100644
--- a/arch/x86/kernel/vsyscall_64.c
+++ b/arch/x86/kernel/vsyscall_64.c
@@ -131,7 +131,7 @@ void dotraplinkage do_emulate_vsyscall(struct pt_regs *regs, long error_code)
 	 * Real 64-bit user mode code has cs == __USER_CS.  Anything else
 	 * is bogus.
 	 */
-	if (regs->cs != __USER_CS) {
+	if ((regs->cs != __USER_CS) && (regs->cs != FLAT_RING3_CS64)) {
 		/*
 		 * If we trapped from kernel mode, we might as well OOPS now
 		 * instead of returning to some random address and OOPSing
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index f987bde..0e4c13c 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1916,6 +1916,7 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot)
 # endif
 #else
 	case VSYSCALL_LAST_PAGE ... VSYSCALL_FIRST_PAGE:
+	case VVAR_PAGE:
 #endif
 	case FIX_TEXT_POKE0:
 	case FIX_TEXT_POKE1:

And getting this on 64-bit:

 started: BusyBox v1.14.3 (2011-07-26 11:43:49 EDT)
[    0.578603] rcS[1128]: segfault at ffffffffff5ff0a0 ip 00007fff40b7380a sp 00007fff40b5c0f0 error 4
[    0.578847] rcS used greatest stack depth: 5024 bytes left
[    0.581897] sh[1131]: segfault at ffffffffff5ff0a0 ip 00007fffb93ff80a sp 00007fffb92bbd70 error 4
[    1.587637] sh[1137]: segfault at ffffffffff5ff0a0 ip 00007ffffa5ff80a sp 00007ffffa522560 error 4
[    2.592295] sh[1141]: segfault at ffffffffff5ff0a0 ip 00007ffffcb3f80a sp 00007ffffca98af0 error 4
[    3.596344] sh[1145]: segfault at ffffffffff5ff0a0 ip 00007fff2e3ff80a sp 00007fff2e3e3370 error 4
[    4.599812] sh[1149]: segfault at ffffffffff5ff0a0 ip 00007fff62dff80a sp 00007fff62ca9f10 error 4
[    5.605835] sh[1153]: segfault at ffffffffff5ff0a0 ip 00007fff117ff80a sp 00007fff1175e7f0 error 4
[    6.609438] sh[1157]: segfault at ffffffffff5ff0a0 ip 00007fff91bff80a sp 00007fff91bd71c0 error 4
[    7.614714] sh[1161]: segfault at ffffffffff5ff0a0 ip 00007fff396b280a sp 00007fff3968ede0 error 4
[    8.620374] sh[1165]: segfault at ffffffffff5ff0a0 ip 00007fffd398b80a sp 00007fffd38ecd70 error 4
[    9.625512] sh[1169]: segfault at ffffffffff5ff0a0 ip 00007fff617d980a sp 00007fff61776070 error 4
[   10.630246] sh[1173]: segfault at ffffffffff5ff0a0 ip 00007fff89fff80a sp 00007fff89f7f3b0 error 4
[   11.635588] sh[1177]: segfault at ffffffffff5ff0a0 ip 00007fffa95ff80a sp 00007fffa95ea7c0 error 4
[   12.640491] sh[1181]: segfault at ffffffffff5ff0a0 ip 00007fff28cd180a sp 00007fff28c524f0 error 4

..

  parent reply	other threads:[~2011-07-26 16:20 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-25 15:54 git commit 9fd67b4ed0714ab718f1f9bd14c344af336a6df7 (x86-64: Give vvars their own page) breaks Xen PV guests (64-bit) Konrad Rzeszutek Wilk
2011-07-25 15:54 ` Konrad Rzeszutek Wilk
2011-07-25 16:10 ` Konrad Rzeszutek Wilk
2011-07-25 16:10   ` Konrad Rzeszutek Wilk
2011-07-25 18:10   ` Andrew Lutomirski
2011-07-26  7:18     ` Jan Beulich
2011-07-26  7:18       ` Jan Beulich
2011-07-26 16:18     ` Konrad Rzeszutek Wilk [this message]
2011-07-26 16:46       ` Ian Campbell
2011-07-26 19:01       ` Andrew Lutomirski
2011-07-26 20:51         ` Konrad Rzeszutek Wilk
2011-07-26 20:51           ` Konrad Rzeszutek Wilk
2011-07-26 20:55           ` Andrew Lutomirski
2011-07-26 20:55             ` Andrew Lutomirski
2011-07-26 21:06             ` Konrad Rzeszutek Wilk
2011-07-26 21:06               ` Konrad Rzeszutek Wilk
     [not found] ` <CAObL_7GpX=f3+tXA4ga6cBB_9VWBe6yVFvon=TzECQs5kcb-ag@mail.gmail.com>
     [not found]   ` <20110726153220.GA15110@dumpdata.com>
2011-07-26 19:08     ` [semi-urgent Xen CS question] " Andrew Lutomirski
2011-07-26 20:48       ` Keir Fraser
2011-07-26 21:10         ` Andrew Lutomirski
2011-07-26 21:40           ` Andrew Lutomirski
2011-07-26 22:20             ` Keir Fraser
2011-07-26 23:37             ` j.fitz.inge@gmail.com
2011-07-27  2:17               ` Andrew Lutomirski
2011-07-27 15:40                 ` Jeremy Fitzhardinge
2011-07-27 16:02                   ` Andrew Lutomirski
2011-07-27 17:19                     ` Jeremy Fitzhardinge
2011-07-28  4:33                       ` Andrew Lutomirski
2011-07-28  6:07                         ` Jeremy Fitzhardinge
2011-07-29 12:51                           ` Andrew Lutomirski
2011-07-29 15:31                             ` Jeremy Fitzhardinge
2011-07-31 18:56                               ` Konrad Rzeszutek Wilk
2011-07-31 19:14                                 ` Andrew Lutomirski
2011-08-02 14:10                                   ` Konrad Rzeszutek Wilk
2011-07-27 12:57           ` Konrad Rzeszutek Wilk

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=20110726161808.GA5333@dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=Ian.Campbell@eu.citrix.com \
    --cc=JBeulich@novell.com \
    --cc=Louis.Rilling@kerlabs.com \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=andi@firstfloor.org \
    --cc=arjan@infradead.org \
    --cc=brgerst@gmail.com \
    --cc=jeremy@goop.org \
    --cc=jj@chaosbits.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@mit.edu \
    --cc=mikpe@it.uu.se \
    --cc=mingo@elte.hu \
    --cc=pageexec@freemail.hu \
    --cc=richard.weinberger@gmail.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.