Jens Nerche wrote:
>
> Hello,
> I'm new on this list, greetings to all listeners!
>
> I think in http://www.freemware.org/docs.phtml?file=paper.txt
> is a lack of some instructions, we should have a look on
> invd, invlpg, rdmsr, wrmsr, wbinvd, sysenter and sysexit. Most
> of them (first 5) are protected, and I don't know if last two important
> for us.
I'm glad you pointed the last 2 out, I haven't looked into
them yet.
First 5 are CPL==0 as you said, so they're no problem.
SYSENTER has the following checks:
IF CR0.PE == 0 THEN #GP(0)
IF SYSENTER_CS_MSR == 0 THEN #GP(0)
So I would say we should do the following. Upon startup of
FreeMWare, check what processor we're running on and see
if sysenter/sysexit are supported via CPUID.
If not supported, then no big deal. If supported then when
ever we warp into our VM, save the value of SYSENTER_CS_MSR
and then set it to 0. Then we'll receive a fault when
the guest tries to use it. We have to restore the value
when warping back to the host OS.
SYSEXIT is CPL==0 only, so also no problem.
-Kevin