Re: [PATCH] x86-64: espfix for 64-bit mode *PROTOTYPE*

H. Peter Anvin
2014-04-29T04:38:00Z

On 04/28/2014 08:45 PM, H. Peter Anvin wrote:
>
> OK, so I found a bug in ldttest.c -- it sets CS to an LDT segment, but
> it never sets SS to an LDT segment. This means that it should really
> have zero footprint versus the espfix code, and implies that we instead
> have another bug involved. Why the espfix code should have any effect
> whatsoever is a mystery, however... if it indeed does?
>
> I have uploaded a fixed ldttest.c, but it seems we might be chasing more
> than that...
>

With the test fixed, the bug was easy to find: we can't compare against
__KERNEL_DS in the doublefault handler, because both SS and the image on
the stack have the stack segment set to zero (NULL).

With that both ldttest and run16 pass with the doublefault code, even
with randomization turned back on.

I have pushed out the fix.

There are still things that need fixing: we need to go through the
espfix path even when returning from NMI/MC (which fortunately can't
nest with taking an NMI/MC on the espfix path itself, since in that case
we will have been interrupted while running in the kernel with a kernel
stack.)

(Cc: Rostedt because of the NMI issue.)

-hpa