[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bochs-cvs
Subject:    [Bochs-cvs] [14318] trunk/bochs/cpu
From:       sshwarts--- via Bochs-cvs <bochs-cvs () lists ! sourceforge ! net>
Date:       2021-07-23 9:30:18
Message-ID: 1627032618.534319.19528 () sfp-scm-3 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]

Revision: 14318
Author:   sshwarts
Date:     2021-07-23 09:30:17 +0000 (Fri, 23 Jul 2021)
Log Message:
-----------
more robust handling of SVM VMCB host ptr

Modified Paths:
--------------
    trunk/bochs/cpu/cpu.h
    trunk/bochs/cpu/init.cc
    trunk/bochs/cpu/svm.cc

Modified: trunk/bochs/cpu/cpu.h
===================================================================
--- trunk/bochs/cpu/cpu.h	2021-07-23 08:06:58 UTC (rev 14317)
+++ trunk/bochs/cpu/cpu.h	2021-07-23 09:30:17 UTC (rev 14318)
@@ -5084,6 +5084,7 @@
 #endif
 
 #if BX_SUPPORT_SVM
+  BX_SMF void set_VMCBPTR(Bit64u vmcbptr);
   BX_SMF void SvmEnterSaveHostState(SVM_HOST_STATE *host);
   BX_SMF bool SvmEnterLoadCheckControls(SVM_CONTROLS *ctrls);
   BX_SMF bool SvmEnterLoadCheckGuestState(void);

Modified: trunk/bochs/cpu/init.cc
===================================================================
--- trunk/bochs/cpu/init.cc	2021-07-23 08:06:58 UTC (rev 14317)
+++ trunk/bochs/cpu/init.cc	2021-07-23 09:30:17 UTC (rev 14318)
@@ -657,6 +657,10 @@
   set_VMCSPTR(BX_CPU_THIS_PTR vmcsptr);
 #endif
 
+#if BX_SUPPORT_SVM
+  set_VMCBPTR(BX_CPU_THIS_PTR vmcbptr);
+#endif
+
 #if BX_SUPPORT_PKEYS
   set_PKeys(BX_CPU_THIS_PTR pkru, BX_CPU_THIS_PTR pkrs);
 #endif
@@ -1056,14 +1060,10 @@
 #endif
 
 #if BX_SUPPORT_SVM
+  set_VMCBPTR(0);
   BX_CPU_THIS_PTR in_svm_guest = 0;
   BX_CPU_THIS_PTR svm_gif = 1;
-  BX_CPU_THIS_PTR vmcbptr = 0;
-  BX_CPU_THIS_PTR vmcbhostptr = 0;
-#if BX_SUPPORT_MEMTYPE
-  BX_CPU_THIS_PTR vmcb_memtype = BX_MEMTYPE_UC;
 #endif
-#endif
 
 #if BX_SUPPORT_VMX || BX_SUPPORT_SVM
   BX_CPU_THIS_PTR in_event = 0;

Modified: trunk/bochs/cpu/svm.cc
===================================================================
--- trunk/bochs/cpu/svm.cc	2021-07-23 08:06:58 UTC (rev 14317)
+++ trunk/bochs/cpu/svm.cc	2021-07-23 09:30:17 UTC (rev 14318)
@@ -32,6 +32,24 @@
 
 extern const char *segname[];
 
+void BX_CPU_C::set_VMCBPTR(Bit64u vmcbptr)
+{
+  BX_CPU_THIS_PTR vmcbptr = vmcbptr;
+
+  if (vmcbptr != 0) {
+    BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(vmcbptr, BX_WRITE);
+#if BX_SUPPORT_MEMTYPE
+    BX_CPU_THIS_PTR vmcb_memtype = resolve_memtype(BX_CPU_THIS_PTR vmcbptr);
+#endif
+  }
+  else {
+    BX_CPU_THIS_PTR vmcbhostptr = 0;
+#if BX_SUPPORT_MEMTYPE
+    BX_CPU_THIS_PTR vmcb_memtype = BX_MEMTYPE_UC;
+#endif
+  }
+}
+
 // When loading segment bases from the VMCB or the host save area
 // (on VMRUN or #VMEXIT), segment bases are canonicalized (i.e.
 // sign-extended from the highest implemented address bit to bit 63)
@@ -986,11 +1004,7 @@
     BX_ERROR(("VMRUN: invalid or not page aligned VMCB physical address !"));
     exception(BX_GP_EXCEPTION, 0);
   }
-  BX_CPU_THIS_PTR vmcbptr = pAddr;
-  BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(pAddr, BX_WRITE);
-#if BX_SUPPORT_MEMTYPE
-  BX_CPU_THIS_PTR vmcb_memtype = resolve_memtype(BX_CPU_THIS_PTR vmcbptr);
-#endif
+  set_VMCBPTR(pAddr);
 
   BX_DEBUG(("VMRUN VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
 
@@ -1060,8 +1074,7 @@
     BX_ERROR(("VMLOAD: invalid or not page aligned VMCB physical address !"));
     exception(BX_GP_EXCEPTION, 0);
   }
-  BX_CPU_THIS_PTR vmcbptr = pAddr;
-  BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(pAddr, BX_WRITE);
+  set_VMCBPTR(pAddr);
 
   BX_DEBUG(("VMLOAD VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
 
@@ -1111,8 +1124,7 @@
     BX_ERROR(("VMSAVE: invalid or not page aligned VMCB physical address !"));
     exception(BX_GP_EXCEPTION, 0);
   }
-  BX_CPU_THIS_PTR vmcbptr = pAddr;
-  BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(pAddr, BX_WRITE);
+  set_VMCBPTR(pAddr);
 
   BX_DEBUG(("VMSAVE VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
 



_______________________________________________
Bochs-cvs mailing list
Bochs-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bochs-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic