Messages in this thread | | | Date | Wed, 08 Sep 2010 13:59:47 -0700 | From | "H. Peter Anvin" <> | Subject | Re: AMD Geode NOPL emulation for kernel 2.6.36-rc2 |
| |
On 08/29/2010 06:39 AM, Matteo Croce wrote: > If the parsing fails due get_user returning error I call > `do_invalid_op(regs, error_code);` > which is the default handler, which does the page fault.
No, it doesn't. It does an SIGILL, not a SIGSEGV. An application which does its own VM management depends on the difference.
Also, you only test for specific forms of NOPL, whereas the right thing is to recognize the overall forms, not just byte sequences.
> to check the CS I do `regs->cs != __USER_CS` but how to check the IP value? > convert_ip_to_linear() and then check something?
get_user() will check for the validity of a linear address, and yes, convert_ip_to_linear() should give you the linear address to check for. However, you also have to check for the CPU mode, since the byte sequences mean different things in 16-, 32- and 64-bit mode.
All of this is why I'm extremely reluctant to allow in an ad hoc hack like this one ... there just are way too many pitfalls, any of which can turn into a security hole.
-hpa
| |