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

Reply via email to