Messages in this thread | | | From | Andy Lutomirski <> | Date | Mon, 14 Jul 2014 10:15:57 -0700 | Subject | Re: Is espfix64's double-fault thing OK on Xen? |
| |
On Mon, Jul 14, 2014 at 10:11 AM, Andy Lutomirski <luto@amacapital.net> wrote: > On Mon, Jul 14, 2014 at 10:04 AM, H. Peter Anvin <hpa@zytor.com> wrote: >> On 07/09/2014 04:17 PM, Andy Lutomirski wrote: >>> This part in __do_double_fault looks fishy: >>> >>> cmpl $__KERNEL_CS,CS(%rdi) >>> jne do_double_fault >>> >>> Shouldn't that be: >>> >>> test $3,CS(%rdi) >>> jnz do_double_fault >>> >> >> No, it should be fine. The *only* case where we need to do the espfix >> magic is when we are on __KERNEL_CS. >> > > IIRC Xen has a somewhat different GDT, and at least the userspace CS > in IA32_STAR disagrees with normal Linux. If the kernel CS is also > strange, then there will be an extra possible CS value here.
There's FLAT_KERNEL_CS64, which is not equal to __KERNEL_CS. If the espfix mechanism gets invoked with that CS, then I expect that something unexpected will happen.
That being said, FLAT_KERNEL_CS64 is CPL3, so my code might not be any better.
--Andy
| |