i have a problwem with sysenter, bochs, or my understanding of manual.
i belive its the third, but i never know.
sysenter/sysexit cant fail. they literally NEVER fail.
GDT limit is ignored, segments are ignored, i can even pass present flag to 0 and it will go as well.
of course limit/base is ignored as well, alogng with gate type, everything!
sysenter enter no matter what to ring0 wia CS/EIP from MSR.
sysexit also return no matter what to ring3, via MSR's calculated segments, and edx.
is it a bug? is it a prat of no-segment enforcement?
from what i remember about x86, from every single DAMNED RPL check i had to go through i see something like that...
Is it something wrong with manual? Maybe bochs? Or maybe intel?
They check rpl before task switches, but they dont even check is segments are within limits and if its present?!
im in ia32 protected mode, sysenter/sysexit. i want to solve this issue before touching ia32e mode (wich from manual i know that works like ia32 now - rewriting base and limit. but ia32 shouldnt do that).
|