Messages in this thread | | | Date | Mon, 28 Apr 2014 21:36:54 -0700 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH] x86-64: espfix for 64-bit mode *PROTOTYPE* |
| |
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
| |