mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
nested VMX: VMLANUCH/VMRESUME emulation must check permission first thing
Otherwise uninitialized data may be used, leading to crashes. This is CVE-2013-4551 / XSA-75. Reported-and-tested-by: Jeff Zimmerman <Jeff_Zimmerman@McAfee.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-and-tested-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
5c42fd7f91
commit
4e87bc5b03
1 file changed
+9
-7
@@ -1509,15 +1509,10 @@ static void clear_vvmcs_launched(struct list_head *launched_list,
|
||||
}
|
||||
}
|
||||
|
||||
int nvmx_vmresume(struct vcpu *v, struct cpu_user_regs *regs)
|
||||
static int nvmx_vmresume(struct vcpu *v, struct cpu_user_regs *regs)
|
||||
{
|
||||
struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
|
||||
struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
|
||||
int rc;
|
||||
|
||||
rc = vmx_inst_check_privilege(regs, 0);
|
||||
if ( rc != X86EMUL_OKAY )
|
||||
return rc;
|
||||
|
||||
/* check VMCS is valid and IO BITMAP is set */
|
||||
if ( (nvcpu->nv_vvmcxaddr != VMCX_EADDR) &&
|
||||
@@ -1536,6 +1531,10 @@ int nvmx_handle_vmresume(struct cpu_user_regs *regs)
|
||||
struct vcpu *v = current;
|
||||
struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
|
||||
struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
|
||||
int rc = vmx_inst_check_privilege(regs, 0);
|
||||
|
||||
if ( rc != X86EMUL_OKAY )
|
||||
return rc;
|
||||
|
||||
if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
|
||||
{
|
||||
@@ -1555,10 +1554,13 @@ int nvmx_handle_vmresume(struct cpu_user_regs *regs)
|
||||
int nvmx_handle_vmlaunch(struct cpu_user_regs *regs)
|
||||
{
|
||||
bool_t launched;
|
||||
int rc;
|
||||
struct vcpu *v = current;
|
||||
struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
|
||||
struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
|
||||
int rc = vmx_inst_check_privilege(regs, 0);
|
||||
|
||||
if ( rc != X86EMUL_OKAY )
|
||||
return rc;
|
||||
|
||||
if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
|
||||
{
|
||||
|
||||