• P
    KVM: x86: use new CS.RPL as CPL during task switch · 2356aaeb
    Paolo Bonzini 提交于
    During task switch, all of CS.DPL, CS.RPL, SS.DPL must match (in addition
    to all the other requirements) and will be the new CPL.  So far this
    worked by carefully setting the CS selector and flag before doing the
    task switch; setting CS.selector will already change the CPL.
    
    However, this will not work once we get the CPL from SS.DPL, because
    then you will have to set the full segment descriptor cache to change
    the CPL.  ctxt->ops->cpl(ctxt) will then return the old CPL during the
    task switch, and the check that SS.DPL == CPL will fail.
    
    Temporarily assume that the CPL comes from CS.RPL during task switch
    to a protected-mode task.  This is the same approach used in QEMU's
    emulation code, which (until version 2.0) manually tracks the CPL.
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    2356aaeb
emulate.c 123.1 KB