Il 15/05/2014 18:51, Paolo Bonzini ha scritto:
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

s/flag/EFLAGS/

task switch; however, this will not work once we get the CPL from SS.DPL:
setting SS itself would fail if the task switch changes the privilege
level.

More precisely, before patch 4 in this series setting CS.selector would already change the CPL. After it, you actually have to set the full segment descriptor cache to change the CPL, so we cannot use ctxt->ops->cpl(ctxt) to retrieve the CPL during a task switch. The check that fails without this patch is that SS.DPL must be == CPL, and the failure happens because ctxt->ops->cpl(ctxt) is the *old* SS.DPL.

Paolo

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.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to