Changeset 92728 in vbox
- Timestamp:
- Dec 3, 2021 5:57:41 AM (3 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r92706 r92728 1768 1768 if (RT_FAILURE(rc)) 1769 1769 { 1770 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 1771 /** @todo Nested VMX: Need to handle EPT violation/misconfig here? */ 1772 Assert(!(Walk.fFailed & PGM_WALKFAIL_EPT)); 1773 #endif 1770 1774 Log(("iemOpcodeFetchMoreBytes: %RGv - rc=%Rrc\n", GCPtrFirst, rc)); 1771 1775 iemRaisePageFaultJmp(pVCpu, GCPtrFirst, IEM_ACCESS_INSTRUCTION, rc); … … 1987 1991 { 1988 1992 Log(("iemOpcodeFetchMoreBytes: %RGv - rc=%Rrc\n", GCPtrNext, rc)); 1993 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 1994 if (Walk.fFailed & PGM_WALKFAIL_EPT) 1995 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PHYS_ADDR, 0 /* cbInstr */); 1996 #endif 1989 1997 return iemRaisePageFault(pVCpu, GCPtrNext, IEM_ACCESS_INSTRUCTION, rc); 1990 1998 } … … 1992 2000 { 1993 2001 Log(("iemOpcodeFetchMoreBytes: %RGv - supervisor page\n", GCPtrNext)); 2002 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 2003 if (Walk.fFailed & PGM_WALKFAIL_EPT) 2004 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */); 2005 #endif 1994 2006 return iemRaisePageFault(pVCpu, GCPtrNext, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED); 1995 2007 } … … 1997 2009 { 1998 2010 Log(("iemOpcodeFetchMoreBytes: %RGv - NX\n", GCPtrNext)); 2011 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 2012 if (Walk.fFailed & PGM_WALKFAIL_EPT) 2013 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */); 2014 #endif 1999 2015 return iemRaisePageFault(pVCpu, GCPtrNext, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED); 2000 2016 } … … 8168 8184 /** @todo Check unassigned memory in unpaged mode. */ 8169 8185 /** @todo Reserved bits in page tables. Requires new PGM interface. */ 8186 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 8187 if (Walk.fFailed & PGM_WALKFAIL_EPT) 8188 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PHYS_ADDR, 0 /* cbInstr */); 8189 #endif 8170 8190 *pGCPhysMem = NIL_RTGCPHYS; 8171 8191 return iemRaisePageFault(pVCpu, GCPtrMem, fAccess, rc); … … 8185 8205 Log(("iemMemPageTranslateAndCheckAccess: GCPtrMem=%RGv - read-only page -> #PF\n", GCPtrMem)); 8186 8206 *pGCPhysMem = NIL_RTGCPHYS; 8207 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 8208 if (Walk.fFailed & PGM_WALKFAIL_EPT) 8209 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */); 8210 #endif 8187 8211 return iemRaisePageFault(pVCpu, GCPtrMem, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED); 8188 8212 } … … 8195 8219 Log(("iemMemPageTranslateAndCheckAccess: GCPtrMem=%RGv - user access to kernel page -> #PF\n", GCPtrMem)); 8196 8220 *pGCPhysMem = NIL_RTGCPHYS; 8221 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 8222 if (Walk.fFailed & PGM_WALKFAIL_EPT) 8223 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */); 8224 #endif 8197 8225 return iemRaisePageFault(pVCpu, GCPtrMem, fAccess, VERR_ACCESS_DENIED); 8198 8226 } … … 8205 8233 Log(("iemMemPageTranslateAndCheckAccess: GCPtrMem=%RGv - NX -> #PF\n", GCPtrMem)); 8206 8234 *pGCPhysMem = NIL_RTGCPHYS; 8235 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 8236 if (Walk.fFailed & PGM_WALKFAIL_EPT) 8237 IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */); 8238 #endif 8207 8239 return iemRaisePageFault(pVCpu, GCPtrMem, fAccess & ~(IEM_ACCESS_TYPE_READ | IEM_ACCESS_TYPE_WRITE), 8208 8240 VERR_ACCESS_DENIED); … … 8220 8252 int rc2 = PGMGstModifyPage(pVCpu, GCPtrMem, 1, fAccessedDirty, ~(uint64_t)fAccessedDirty); 8221 8253 AssertRC(rc2); 8254 /** @todo Nested VMX: Accessed/dirty bit updates might fail and cause EPT 8255 * violations/EPT misconfigs. */ 8222 8256 } 8223 8257
Note:
See TracChangeset
for help on using the changeset viewer.

