All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>, Feng Wu <feng.wu@intel.com>
Cc: Sander Eikelenboom <linux@eikelenboom.it>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Subject: Re: Bisected Xen-unstable: "Segment register inaccessible for d1v0" when starting HVM guest on intel
Date: Wed, 2 Jul 2014 10:44:49 +0100	[thread overview]
Message-ID: <53B3D491.1080907@citrix.com> (raw)
In-Reply-To: <53B3ECEE020000780001F61F@mail.emea.novell.com>

On 02/07/14 10:28, Jan Beulich wrote:
>>>> On 02.07.14 at 11:14, <feng.wu@intel.com> wrote:
>>> From: Jan Beulich [mailto:JBeulich@suse.com]
>>> No, you're again looking at the segment register load side, which isn't
>>> what this started with, and which we should put aside. The implicit
>>> supervisor mode accesses we're needing to deal with here are the
>>> ones _not_ resulting from emulation of anything: The update of the
>>> runstate area (which is what Sander stumbled across) and (similar)
>>> the update of time data, i.e. update_secondary_system_time(). Now
>>> that I think about it the two are actually different: The latter is
>>> specifically intended to update posibly user mode visible data, so we
>>> need to first determine whether it is correct to apply the SMAP check
>>> here (I think it is since the virtual address given to the kernel
>>> shouldn't be the one exposed to user mode - at least on Linux, so
>>> the question is whether we can assume eventual other OSes making
>>> use of this PV extension to also use distinct virtual addresses here).
>> If I understand it correctly, referring to the two examples you mentioned 
>> here, 
>> this is about a shared memory between Xen and guests. I have some questions 
>> about this:
>> 1. What is the relationship between these operations and implicit supervisor 
>> mode accesses?
>> Seems this is not what is defined for implicit supervisor mode accesses in 
>> the Spec.
>> 2. For the first case you mentioned above, (v)->runstate_guest is a guest 
>> pointer which
>> is set in 'VCPUOP_register_runstate_memory_area' operation, but I only see 
>> this pointer
>> is set for domain 0, how is it set for HVM guests? For Sander's case, seems 
>> this pointer
>> is set for the HVM guests (d1v0).
> I have no idea where you found this to be set for Dom0 only.
> VCPUOP_register_runstate_memory_area is available to all guests.
>
>> Here is a quote from Intel SDM:
>> "If CR4.SMAP=1, supervisor-mode data accesses are not allowed to linear 
>> addresses that are accessible in user mode",
>> So for the second case you listed above, if Xen and user space use different 
>> virtual
>> address, if the virtual address for Xen usage is supervisor-only, no SMAP 
>> check will
>> be needed, However, if they use the same virtual address, SMAP check may be 
>> needed
>> if this virtual address is use accessible. 
> This being a PV extension to the base architecture, the hardware
> specification is meaningless. What we need to do here is _extend_ what
> the hardware has specified for those extra accesses. We have three
> options basically:
> 1) never do any checking on such accesses
> 2) honor CPL and EFLAGS.AC
> 3) always do the checking
> The first one obviously is bad from a security POV. Since the third one is
> more strict than the second and since I assume adding some override is
> going to be the simpler change than altering the point in time when the
> VMCS gets loaded during context switch (the suggestion of which no one
> at all commented on so far), I'd prefer that one, but wouldn't mind
> option 2 to be implemented instead.
>
> Jan

The problem is not the hypervisor check.  We are already deep within an
hvm_copy_to_user() which is between a stac()/clac() pair.

The issue is that guest_walk_tables() is checking a Xen access using
guest page tables as if it were a supervisor access given the current
context of the vcpu.

What can/should Xen do if its emulated access fails with a guest SMAP
violations?  It certainly can't/shouldn't inject a pagefault, nor should
it actually fail the write.  copy_to_user() is not subject to the guest
operating mode and whether we are writing into guest user or supervisor
pages.

~Andrew

  reply	other threads:[~2014-07-02  9:44 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-28 20:21 Bisected Xen-unstable: "Segment register inaccessible for d1v0" when starting HVM guest on intel Sander Eikelenboom
2014-06-30 15:45 ` Jan Beulich
2014-06-30 16:37   ` Sander Eikelenboom
2014-06-30 17:31     ` Andrew Cooper
2014-07-01  5:05       ` Wu, Feng
2014-07-01  7:01         ` Jan Beulich
2014-07-01  9:03           ` Wu, Feng
2014-07-01  9:39             ` Jan Beulich
2014-07-01  9:49               ` Jan Beulich
2014-07-02  4:23               ` Wu, Feng
2014-07-02  7:02                 ` Jan Beulich
2014-07-02  7:32                   ` Wu, Feng
2014-07-02  7:50                     ` Jan Beulich
2014-07-02  9:14                       ` Wu, Feng
2014-07-02  9:28                         ` Jan Beulich
2014-07-02  9:44                           ` Andrew Cooper [this message]
2014-07-02  9:55                             ` Jan Beulich
2014-07-02 10:02                               ` Andrew Cooper
2014-07-02 10:07                                 ` Jan Beulich
2014-07-02 10:37                                   ` Andrew Cooper
2014-07-02 12:08                               ` Wu, Feng
2014-07-02 12:34                                 ` Jan Beulich
2014-07-02 13:15                           ` Wu, Feng
2014-07-02 13:22                             ` Jan Beulich
2014-07-03  6:15                               ` Wu, Feng
2014-07-03  6:49                                 ` Jan Beulich
2014-07-03  8:17                                   ` Wu, Feng
2014-07-03  8:59                                     ` Jan Beulich
2014-07-03  9:24                                       ` Wu, Feng
2014-07-03  9:32                                         ` Jan Beulich
2014-07-03 13:04                                   ` Wu, Feng
2014-07-03 13:21                                     ` Jan Beulich
2014-07-03 13:34                                       ` Wu, Feng
2014-07-04  2:51     ` Wu, Feng
2014-07-04  6:50       ` Jan Beulich
2014-07-04  6:58         ` Wu, Feng
2014-07-04  7:11           ` Jan Beulich
2014-07-04  8:54             ` Wu, Feng
2014-07-04  9:04               ` Jan Beulich
2014-07-04  9:08                 ` Wu, Feng
2014-07-07 20:48                   ` Konrad Rzeszutek Wilk
2014-07-07 22:26                     ` Wu, Feng

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=53B3D491.1080907@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=JBeulich@suse.com \
    --cc=feng.wu@intel.com \
    --cc=linux@eikelenboom.it \
    --cc=xen-devel@lists.xenproject.org \
    /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.