Messages in this thread | | | Date | Sat, 17 May 2014 00:19:52 +0200 | From | Paolo Bonzini <> | Subject | Re: [PATCH v2 1/4] KVM: x86: use new CS.RPL as CPL during task switch |
| |
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.
| |