Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


reverted syscall changes
[palacios-OLD.git] / palacios / src / palacios / vmm_ctrl_regs.c
index afecc74..d5a8650 100644 (file)
@@ -26,7 +26,7 @@
 #include <palacios/vmm_direct_paging.h>
 #include <palacios/svm.h>
 
-#ifndef CONFIG_DEBUG_CTRL_REGS
+#ifndef V3_CONFIG_DEBUG_CTRL_REGS
 #undef PrintDebug
 #define PrintDebug(fmt, args...)
 #endif
@@ -108,13 +108,18 @@ static int handle_mov_to_cr0(struct guest_info * info, struct x86_instr * dec_in
     *guest_cr0 = *new_cr0;
     
     // This value must always be set to 1 
-    guest_cr0->et = 1;    
+    guest_cr0->et = 1;
     
     // Set the shadow register to catch non-virtualized flags
     *shadow_cr0 = *guest_cr0;
     
     // Paging is always enabled
-    shadow_cr0->pg = 1;  
+    shadow_cr0->pg = 1;
+
+    if (guest_cr0->pg == 0) {
+       // If paging is not enabled by the guest, then we always enable write-protect to catch memory hooks
+       shadow_cr0->wp = 1;
+    }
     
     // Was there a paging transition
     // Meaning we need to change the page tables
@@ -561,15 +566,19 @@ int v3_handle_efer_write(struct guest_info * core, uint_t msr, struct v3_msr src
     
     PrintDebug("EFER Write\n");
     PrintDebug("EFER Write Values: HI=%x LO=%x\n", src.hi, src.lo);
+
     //PrintDebug("Old EFER=%p\n", (void *)*(addr_t*)(shadow_efer));
     
     // We virtualize the guests efer to hide the SVME and LMA bits
     guest_efer->value = src.value;
     
-    
-    // Enable/Disable Syscall
-    shadow_efer->sce = src.value & 0x1;
-    
+    if (core->shdw_pg_mode == SHADOW_PAGING) {
+       // Enable/Disable Syscall
+       shadow_efer->sce = src.value & 0x1;
+    } else if (core->shdw_pg_mode == NESTED_PAGING) {
+       *(uint64_t *)shadow_efer = src.value;
+       shadow_efer->svme = 1;
+    }
     return 0;
 }