]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c
OvmfPkg/VmgExitLib: Check for an explicit DR7 cached value
[mirror_edk2.git] / OvmfPkg / Library / VmgExitLib / VmgExitVcHandler.c
index 1671db3a01b10f775ed7b92cb64ed69bce1793d3..5149ab2bc98927956ea36a3b4b337ceb9fddc55b 100644 (file)
@@ -128,10 +128,13 @@ UINT64
 \r
 //\r
 // Per-CPU data mapping structure\r
+//   Use UINT32 for cached indicators and compare to a specific value\r
+//   so that the hypervisor can't indicate a value is cached by just\r
+//   writing random data to that area.\r
 //\r
 typedef struct {\r
-  BOOLEAN  Dr7Cached;\r
-  UINT64   Dr7;\r
+  UINT32  Dr7Cached;\r
+  UINT64  Dr7;\r
 } SEV_ES_PER_CPU_DATA;\r
 \r
 \r
@@ -1489,7 +1492,7 @@ Dr7WriteExit (
   }\r
 \r
   SevEsData->Dr7 = *Register;\r
-  SevEsData->Dr7Cached = TRUE;\r
+  SevEsData->Dr7Cached = 1;\r
 \r
   return 0;\r
 }\r
@@ -1533,7 +1536,7 @@ Dr7ReadExit (
   // If there is a cached valued for DR7, return that. Otherwise return the\r
   // DR7 standard reset value of 0x400 (no debug breakpoints set).\r
   //\r
-  *Register = (SevEsData->Dr7Cached) ? SevEsData->Dr7 : 0x400;\r
+  *Register = (SevEsData->Dr7Cached == 1) ? SevEsData->Dr7 : 0x400;\r
 \r
   return 0;\r
 }\r