From: Cyrill Gorcunov <gorcunov@gmail.com>
To: Ian Campbell <ijc@hellion.org.uk>
Cc: Brian Gerst <brgerst@gmail.com>,
Christian Kujau <lists@nerdbynature.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Jeremy Fitzhardinge <jeremy@goop.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: 2.6.33-rc2: Xen/Guest switching to user mode with no user page tables
Date: Sun, 10 Jan 2010 16:36:28 +0300 [thread overview]
Message-ID: <20100110133628.GC5189@lenovo> (raw)
In-Reply-To: <1263128343.2393.45.camel@cthulhu.hellion.org.uk>
On Sun, Jan 10, 2010 at 12:59:03PM +0000, Ian Campbell wrote:
> On Sun, 2010-01-10 at 11:09 +0300, Cyrill Gorcunov wrote:
> > On Sat, Jan 09, 2010 at 08:50:04PM -0500, Brian Gerst wrote:
> > ...
> > > > ---
> > > > x86: kernel_thread -- initialize SS to a known state
> > > >
> > > > Before the kernel_thread was converted into "C" we had
> > > > pt_regs::ss set to __KERNEL_DS (by SAVE_ALL asm macro).
> > > >
> > > > Though I must admit I didn't find any *explicit* load of
> > > > %ss from this structure the better to be on a safe side
> > > > and set it to a known value.
> > >
> > > It shouldn't make any difference, but maybe Xen is doing something
> > > subtle. In 64-bit mode the %ss segment register is supposed to be
> > > ignored, which is why it is left set to zero. It works properly on
> > > real hardware. It can't hurt anything to put __KERNEL_DS back in, but
> > > I'd just like to know why Xen requires it if this does fix it.
> >
> > Yeah, I didn't found any explicit %ss reloading for this _particular_
> > case (as I marked in patch changelog). So the only suspicious is Xen
> > itself. So as only Christian get ability to test -- we will see the
> > results.
>
> The difference with Xen is that it must squash the RPL of SS (to 3 for
> 64 bit and 1 for 32 bit, 32 bit doesn't matter here though). Perhaps a
> NULL selector can only have RPL==0? (I'm away from my architecture docs
> so I can't check). In any case specifying a non-NULL SS selector allows
> the squashing to occur correctly.
>
> However this is not the cause of the original "Guest switching to user
> mode with no user page tables" error. This is down to
> commit f443ff4201dd25cd4dec183f9919ecba90c8edc2
> Author: Brian Gerst <brgerst@gmail.com>
> Date: Wed Dec 9 12:34:43 2009 -0500
>
> x86: Sync 32/64-bit kernel_thread
>
> Signed-off-by: Brian Gerst <brgerst@gmail.com>
> LKML-Reference: <1260380084-3707-5-git-send-email-brgerst@gmail.com>
> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
> which on 64 bit resulted in changing regs.cs from "__KERNEL_CS" to
> "__KERNEL_CS | get_kernel_rpl()". The later seems more logical (and is
> correct for 32 bit) but on 64 bit we frequently use a pattern like "cmpl
> $3, CS(%rsp); je foo" quite a bit to detect return to user vs kernel and
> an RPL of 1 will unfortunately incorrectly trigger the return to
> userspace paths.
>
> The correct fix is for the Xen backend to declare kernel RPL == 0 for 64
> bit guests -- the hyervisor already takes care of all the necessary
> squashing to ring 3 transparently (because making the guest worry about
> it would break the very common assumption that you can distinguish user
> from kernel CS by RPL).
>
> With just the CS RPL fix below I see a GPF at kernel_thread_helper with
> SS=3 (hence my hypothesis about NULL selectors and non-zero RPL above).
> With both the SS and CS fixes things work fine.
any of CS,SS loaded with NULL descriptor should lead to #GP
>
> Ian.
>
> ---
> Subject: xen: 64 bit kernel RPL should be 0.
>
...
Good catch Ian! I've noted that Xen use it's own get_kernel_rpl
while discussing this problem in a chat. But I must admit *I simply don't know*
what Xen does, or how it works internally (neither I have will to learn it at
moment :)
That said -- I'm happy if yor patch fixes problem (and it looks that
get_kernel_rpl is guilty here indeed).
-- Cyrill
next prev parent reply other threads:[~2010-01-10 13:36 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-06 1:03 2.6.33-rc2: Xen/Guest switching to user mode with no user page tables Christian Kujau
2010-01-06 3:38 ` Jeremy Fitzhardinge
2010-01-06 3:48 ` Christian Kujau
2010-01-06 5:14 ` Jeremy Fitzhardinge
2010-01-06 11:06 ` Christian Kujau
2010-01-06 11:21 ` Cyrill Gorcunov
2010-01-06 12:43 ` Christian Kujau
2010-01-07 19:06 ` Christian Kujau
2010-01-07 19:20 ` Cyrill Gorcunov
2010-01-07 19:31 ` Christian Kujau
2010-01-07 19:34 ` Cyrill Gorcunov
2010-01-07 19:19 ` H. Peter Anvin
2010-01-07 19:30 ` Christian Kujau
2010-01-08 21:50 ` Cyrill Gorcunov
2010-01-09 23:55 ` Christian Kujau
2010-01-10 1:50 ` Brian Gerst
2010-01-10 8:09 ` Cyrill Gorcunov
2010-01-10 12:59 ` Ian Campbell
2010-01-10 13:36 ` Cyrill Gorcunov [this message]
2010-01-10 13:49 ` Cyrill Gorcunov
2010-01-10 14:05 ` Ian Campbell
2010-01-15 8:36 ` Christian Kujau
2010-01-15 11:29 ` Ian Campbell
2010-01-15 12:03 ` Cyrill Gorcunov
2010-01-15 12:00 ` Cyrill Gorcunov
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=20100110133628.GC5189@lenovo \
--to=gorcunov@gmail.com \
--cc=brgerst@gmail.com \
--cc=hpa@zytor.com \
--cc=ijc@hellion.org.uk \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lists@nerdbynature.de \
/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.