]> xenbits.xensource.com Git - xen.git/commit
x86: correct LDT checks
authorJan Beulich <jbeulich@suse.com>
Fri, 11 Oct 2013 07:28:26 +0000 (09:28 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 11 Oct 2013 07:28:26 +0000 (09:28 +0200)
commit40d66baa46ca8a9ffa6df3e063a967d08ec92bcf
tree551daf93c5e8b6a8bd50cf58f5a30eb1da8ec1dc
parent4c37ed562224295c0f8b00211287d57cae629782
x86: correct LDT checks

- MMUEXT_SET_LDT should behave as similarly to the LLDT instruction as
  possible: fail only if the base address is non-canonical
- instead LDT descriptor accesses should fault if the descriptor
  address ends up being non-canonical (by ensuring this we at once
  avoid reading an entry from the mach-to-phys table and consider it a
  page table entry)
- fault propagation on using LDT selectors must distinguish #PF and #GP
  (the latter must be raised for a non-canonical descriptor address,
  which also applies to several other uses of propagate_page_fault(),
  and hence the problem is being fixed there)
- map_ldt_shadow_page() should properly wrap addresses for 32-bit VMs

At once remove the odd invokation of map_ldt_shadow_page() from the
MMUEXT_SET_LDT handler: There's nothing really telling us that the
first LDT page is going to be preferred over others.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
xen/arch/x86/domain.c
xen/arch/x86/mm.c
xen/arch/x86/traps.c
xen/include/asm-x86/mm.h
xen/include/asm-x86/paging.h