From 608775cd5acb16e64df8c013710f807e20488d03 Mon Sep 17 00:00:00 2001 From: Stanislav Shwartsman Date: Mon, 21 Jan 2013 20:20:14 +0000 Subject: [PATCH] vmread/vmwrite should always check for CPL, also when in vmx guest --- bochs/cpu/vmx.cc | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/bochs/cpu/vmx.cc b/bochs/cpu/vmx.cc index 4423b97b1..b4d827213 100644 --- a/bochs/cpu/vmx.cc +++ b/bochs/cpu/vmx.cc @@ -3007,11 +3007,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VMREAD_EdGd(bxInstruction_c *i) vmcs_pointer = BX_CPU_THIS_PTR vmcs.vmcs_linkptr; } - else { - if (CPL != 0) { - BX_ERROR(("VMREAD with CPL!=0 cause #GP(0)")); - exception(BX_GP_EXCEPTION, 0); - } + + if (CPL != 0) { + BX_ERROR(("VMREAD with CPL!=0 cause #GP(0)")); + exception(BX_GP_EXCEPTION, 0); } if (vmcs_pointer == BX_INVALID_VMCSPTR) { @@ -3060,11 +3059,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VMREAD_EqGq(bxInstruction_c *i) vmcs_pointer = BX_CPU_THIS_PTR vmcs.vmcs_linkptr; } - else { - if (CPL != 0) { - BX_ERROR(("VMREAD with CPL!=0 cause #GP(0)")); - exception(BX_GP_EXCEPTION, 0); - } + + if (CPL != 0) { + BX_ERROR(("VMREAD with CPL!=0 cause #GP(0)")); + exception(BX_GP_EXCEPTION, 0); } if (vmcs_pointer == BX_INVALID_VMCSPTR) { @@ -3118,11 +3116,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VMWRITE_GdEd(bxInstruction_c *i) vmcs_pointer = BX_CPU_THIS_PTR vmcs.vmcs_linkptr; } - else { - if (CPL != 0) { - BX_ERROR(("VMWRITE with CPL!=0 cause #GP(0)")); - exception(BX_GP_EXCEPTION, 0); - } + + if (CPL != 0) { + BX_ERROR(("VMWRITE with CPL!=0 cause #GP(0)")); + exception(BX_GP_EXCEPTION, 0); } if (vmcs_pointer == BX_INVALID_VMCSPTR) { @@ -3185,11 +3182,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VMWRITE_GqEq(bxInstruction_c *i) vmcs_pointer = BX_CPU_THIS_PTR vmcs.vmcs_linkptr; } - else { - if (CPL != 0) { - BX_ERROR(("VMWRITE with CPL!=0 cause #GP(0)")); - exception(BX_GP_EXCEPTION, 0); - } + + if (CPL != 0) { + BX_ERROR(("VMWRITE with CPL!=0 cause #GP(0)")); + exception(BX_GP_EXCEPTION, 0); } if (vmcs_pointer == BX_INVALID_VMCSPTR) {