Changeset 26271 in vbox
- Timestamp:
- Feb 5, 2010 4:04:36 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 57330
- Location:
- trunk
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/csam.h
r21217 r26271 149 149 * @param GCPtr GC pointer of page table entry 150 150 */ 151 VMMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTRC PTR GCPtr);151 VMMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTRCUINTPTR GCPtr); 152 152 153 153 -
trunk/include/VBox/patm.h
r21217 r26271 194 194 * @param pAddr Guest context address 195 195 */ 196 VMMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTRC PTR pAddr);196 VMMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTRCUINTPTR pAddr); 197 197 198 198 /** -
trunk/src/VBox/VMM/EMHandleRCTmpl.h
r26120 r26271 90 90 91 91 case VINF_PATM_DUPLICATE_FUNCTION: 92 Assert(PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtx->eip));92 Assert(PATMIsPatchGCAddr(pVM, pCtx->eip)); 93 93 rc = PATMR3DuplicateFunctionRequest(pVM, pCtx); 94 94 AssertRC(rc); … … 190 190 case VINF_EM_RAW_RING_SWITCH_INT: 191 191 Assert(TRPMHasTrap(pVCpu)); 192 Assert(!PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtx->eip));192 Assert(!PATMIsPatchGCAddr(pVM, pCtx->eip)); 193 193 194 194 if (TRPMHasTrap(pVCpu)) -
trunk/src/VBox/VMM/EMRaw.cpp
r26260 r26271 625 625 uint32_t uCpl = CPUMGetGuestCPL(pVCpu, CPUMCTX2CORE(pCtx)); 626 626 if ( uCpl == 0 627 && PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtx->eip))627 && PATMIsPatchGCAddr(pVM, pCtx->eip)) 628 628 { 629 629 LogFlow(("emR3RawGuestTrap: trap %#x in patch code; eip=%08x\n", u8TrapNo, pCtx->eip)); … … 1157 1157 1158 1158 case OP_HLT: 1159 if (PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtx->eip))1159 if (PATMIsPatchGCAddr(pVM, pCtx->eip)) 1160 1160 { 1161 1161 PATMTRANSSTATE enmState; -
trunk/src/VBox/VMM/PATM/PATMSSM.cpp
r26265 r26271 1001 1001 case FIXUP_ABSOLUTE: 1002 1002 { 1003 if (pRec->pSource && !PATMIsPatchGCAddr(pVM, pRec->pSource))1003 if (pRec->pSource && !PATMIsPatchGCAddr(pVM, (RTRCUINTPTR)pRec->pSource)) 1004 1004 break; 1005 1005 -
trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp
r20011 r26271 248 248 * @param GCPtr GC pointer of page table entry 249 249 */ 250 VMMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTRC PTR GCPtr)250 VMMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTRCUINTPTR GCPtr) 251 251 { 252 252 for (uint32_t i=0;i<pVM->csam.s.cDangerousInstr;i++) -
trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp
r19259 r26271 53 53 VMMDECL(void) PATMRawEnter(PVM pVM, PCPUMCTXCORE pCtxCore) 54 54 { 55 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTRCPTR)pCtxCore->eip);55 bool fPatchCode = PATMIsPatchGCAddr(pVM, pCtxCore->eip); 56 56 57 57 /* … … 124 124 VMMDECL(void) PATMRawLeave(PVM pVM, PCPUMCTXCORE pCtxCore, int rawRC) 125 125 { 126 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTRCPTR)pCtxCore->eip);126 bool fPatchCode = PATMIsPatchGCAddr(pVM, pCtxCore->eip); 127 127 /* 128 128 * We will only be called if PATMRawEnter was previously called. … … 268 268 * @param pAddrGC Guest context address 269 269 */ 270 VMMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTRC PTR pAddrGC)271 { 272 return (PATMIsEnabled(pVM) && pAddrGC >= pVM->patm.s.pPatchMemGC && pAddrGC < (RTRCPTR)((RTRCUINTPTR)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem)) ? true : false;270 VMMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTRCUINTPTR pAddrGC) 271 { 272 return (PATMIsEnabled(pVM) && pAddrGC - (RTRCUINTPTR)pVM->patm.s.pPatchMemGC < pVM->patm.s.cbPatchMem) ? true : false; 273 273 } 274 274 … … 317 317 if (PATMIsEnabled(pVM)) 318 318 { 319 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pCtxCore->eip))319 if (PATMIsPatchGCAddr(pVM, pCtxCore->eip)) 320 320 return false; 321 321 } … … 462 462 Log(("PATMAddBranchToLookupCache: Adding (%RRv->%RRv (%RRv)) to table %RRv\n", pBranchTarget, pRelBranchPatch + pVM->patm.s.pPatchMemGC, pRelBranchPatch, pJumpTableGC)); 463 463 464 AssertReturn(PATMIsPatchGCAddr(pVM, pJumpTableGC), VERR_INVALID_PARAMETER);464 AssertReturn(PATMIsPatchGCAddr(pVM, (RTRCUINTPTR)pJumpTableGC), VERR_INVALID_PARAMETER); 465 465 466 466 #ifdef IN_RC -
trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp
r25771 r26271 66 66 { 67 67 PPATMGCSTATE pPATMGCState; 68 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip);68 bool fPatchCode = PATMIsPatchGCAddr(pVM, pRegFrame->eip); 69 69 int rc; 70 70 PVMCPU pVCpu = VMMGetCpu0(pVM); -
trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp
r25647 r26271 160 160 /* Very important check -> otherwise we have a security leak. */ 161 161 AssertReturn(!pRegFrame->eflags.Bits.u1VM && (pRegFrame->ss & X86_SEL_RPL) == 1, VERR_ACCESS_DENIED); 162 Assert(PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip));162 Assert(PATMIsPatchGCAddr(pVM, pRegFrame->eip)); 163 163 164 164 /* OP_ILLUD2 in PATM generated code? */ … … 186 186 * edi = PATCHJUMPTABLE ptr 187 187 */ 188 AssertMsg(!pRegFrame->edi || PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->edi), ("edx = %x\n", pRegFrame->edi));188 AssertMsg(!pRegFrame->edi || PATMIsPatchGCAddr(pVM, pRegFrame->edi), ("edx = %x\n", pRegFrame->edi)); 189 189 190 190 Log(("PATMGC: lookup %x jump table=%x\n", pRegFrame->edx, pRegFrame->edi)); … … 457 457 458 458 /* Int 3 in PATM generated code? (most common case) */ 459 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))459 if (PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 460 460 { 461 461 /* @note hardcoded assumption about it being a single byte int 3 instruction. */ -
trunk/src/VBox/VMM/TRPM.cpp
r26263 r26271 1450 1450 1451 1451 pCtx = CPUMQueryGuestCtxPtr(pVCpu); 1452 Assert(!PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtx->eip));1452 Assert(!PATMIsPatchGCAddr(pVM, pCtx->eip)); 1453 1453 Assert(!VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)); 1454 1454 -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r26180 r26271 153 153 154 154 # elif defined(IN_RC) 155 if (!PATMIsPatchGCAddr(pVM, (RTRCPTR)pSrc))155 if (!PATMIsPatchGCAddr(pVM, pSrc)) 156 156 { 157 157 int rc = MMGCRamRead(pVM, pDest, (void *)pSrc, cb); -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r26218 r26271 716 716 || pvFault - pRegFrame->eip < 8 /* instruction crossing a page boundary */ 717 717 # ifdef CSAM_DETECT_NEW_CODE_PAGES 718 || ( !PATMIsPatchGCAddr(pVM, (RTGCPTR)pRegFrame->eip)718 || ( !PATMIsPatchGCAddr(pVM, pRegFrame->eip) 719 719 && CSAMDoesPageNeedScanning(pVM, (RTRCPTR)pRegFrame->eip)) /* any new code we encounter here */ 720 720 # endif /* CSAM_DETECT_NEW_CODE_PAGES */ -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r26180 r26271 892 892 { 893 893 #ifdef IN_RC 894 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))894 if (PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 895 895 { 896 896 LogFlow(("pgmPoolAccessHandlerPTWorker: Interpretation failed for patch code %04x:%RGv, ignoring.\n", -
trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp
r26264 r26271 423 423 && !(eflags.Bits.u1VM) /** @todo implement when needed (illegal for same privilege level transfers). */ 424 424 #endif 425 && !PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip)425 && !PATMIsPatchGCAddr(pVM, pRegFrame->eip) 426 426 ) 427 427 { … … 728 728 if (pVM->trpm.s.aGuestTrapHandler[iGate] == TRPM_INVALID_HANDLER) 729 729 STAM_COUNTER_INC(&pVM->trpm.s.StatForwardFailNoHandler); 730 else if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))730 else if (PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 731 731 STAM_COUNTER_INC(&pVM->trpm.s.StatForwardFailPatchAddr); 732 732 #endif -
trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp
r26175 r26271 208 208 LogFlow(("pdmRCDevHlp_PATMSetMMIOPatchInfo: caller=%p/%d:\n", pDevIns, pDevIns->iInstance)); 209 209 210 return PATMSetMMIOPatchInfo(pDevIns->Internal.s.pVMRC, GCPhys, (RTRCPTR) pCachedData);210 return PATMSetMMIOPatchInfo(pDevIns->Internal.s.pVMRC, GCPhys, (RTRCPTR)(uintptr_t)pCachedData); 211 211 } 212 212 -
trunk/src/VBox/VMM/VMMGC/SELMGC.cpp
r19141 r26271 68 68 */ 69 69 X86DESC Desc; 70 int rc = MMGCRamRead(pVM, &Desc, (uint8_t *) GdtrGuest.pGdt + offEntry, sizeof(X86DESC));70 int rc = MMGCRamRead(pVM, &Desc, (uint8_t *)(uintptr_t)GdtrGuest.pGdt + offEntry, sizeof(X86DESC)); 71 71 if (RT_FAILURE(rc)) 72 72 return VINF_EM_RAW_EMULATE_INSTR_GDT_FAULT; … … 317 317 * then check if any of these has changed. 318 318 */ 319 PCVBOXTSS pGuestTss = (PVBOXTSS) pVM->selm.s.GCPtrGuestTss;319 PCVBOXTSS pGuestTss = (PVBOXTSS)(uintptr_t)pVM->selm.s.GCPtrGuestTss; 320 320 if ( PAGE_ADDRESS(&pGuestTss->esp0) == PAGE_ADDRESS(&pGuestTss->padding_ss0) 321 321 && PAGE_ADDRESS(&pGuestTss->esp0) == PAGE_ADDRESS((uint8_t *)pGuestTss + offRange) -
trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp
r26152 r26271 406 406 */ 407 407 if ( Cpu.pCurInstr->opcode == OP_ILLUD2 408 && PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))408 && PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 409 409 { 410 410 rc = PATMGCHandleIllegalInstrTrap(pVM, pRegFrame); … … 429 429 Log(("TRPMGCTrap06Handler: pc=%08x op=%d\n", pRegFrame->eip, Cpu.pCurInstr->opcode)); 430 430 #ifdef DTRACE_EXPERIMENT /** @todo fix/remove/permanent-enable this when DIS/PATM handles invalid lock sequences. */ 431 Assert(!PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip));431 Assert(!PATMIsPatchGCAddr(pVM, pRegFrame->eip)); 432 432 rc = TRPMForwardTrap(pVCpu, pRegFrame, 0x6, 0, TRPM_TRAP_NO_ERRORCODE, TRPM_TRAP, 0x6); 433 433 Assert(rc == VINF_EM_RAW_GUEST_TRAP); … … 618 618 { 619 619 Assert(pCpu->param1.flags & USE_IMMEDIATE8); 620 Assert(!(PATMIsPatchGCAddr(pVM, (RTRCPTR)PC)));620 Assert(!(PATMIsPatchGCAddr(pVM, PC))); 621 621 if (pCpu->param1.parval == 3) 622 622 { … … 646 646 case OP_HLT: 647 647 /* If it's in patch code, defer to ring-3. */ 648 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)PC))648 if (PATMIsPatchGCAddr(pVM, PC)) 649 649 break; 650 650 … … 662 662 case OP_MOV_DR: 663 663 /* We can safely emulate control/debug register move instructions in patched code. */ 664 if ( !PATMIsPatchGCAddr(pVM, (RTRCPTR)PC)665 && !CSAMIsKnownDangerousInstr(pVM, (RTRCPTR)PC))664 if ( !PATMIsPatchGCAddr(pVM, PC) 665 && !CSAMIsKnownDangerousInstr(pVM, PC)) 666 666 break; 667 667 case OP_INVLPG: … … 938 938 case VINF_EM_RAW_GUEST_TRAP: 939 939 case VINF_EM_RAW_EXCEPTION_PRIVILEGED: 940 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))940 if (PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 941 941 rc = VINF_PATM_PATCH_TRAP_GP; 942 942 break; … … 962 962 963 963 default: 964 AssertMsg(PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip) == false, ("return code %d\n", rc));964 AssertMsg(PATMIsPatchGCAddr(pVM, pRegFrame->eip) == false, ("return code %d\n", rc)); 965 965 break; 966 966 } … … 1003 1003 case VINF_EM_RAW_EMULATE_INSTR_LDT_FAULT: 1004 1004 case VINF_EM_RAW_EMULATE_INSTR_IDT_FAULT: 1005 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))1005 if (PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 1006 1006 rc = VINF_PATCH_EMULATE_INSTR; 1007 1007 break; 1008 1008 1009 1009 case VINF_EM_RAW_GUEST_TRAP: 1010 if (PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip))1010 if (PATMIsPatchGCAddr(pVM, pRegFrame->eip)) 1011 1011 return VINF_PATM_PATCH_TRAP_PF; 1012 1012 … … 1033 1033 1034 1034 default: 1035 AssertMsg(PATMIsPatchGCAddr(pVM, (RTRCPTR)pRegFrame->eip) == false, ("Patch address for return code %d. eip=%08x\n", rc, pRegFrame->eip));1035 AssertMsg(PATMIsPatchGCAddr(pVM, pRegFrame->eip) == false, ("Patch address for return code %d. eip=%08x\n", rc, pRegFrame->eip)); 1036 1036 break; 1037 1037 } -
trunk/src/recompiler/VBoxREMWrapper.cpp
r25732 r26271 656 656 { 657 657 { REMPARMDESC_FLAGS_INT, sizeof(PVM), NULL }, 658 { REMPARMDESC_FLAGS_INT, sizeof(RTRC PTR), NULL }658 { REMPARMDESC_FLAGS_INT, sizeof(RTRCUINTPTR), NULL } 659 659 }; 660 660 static const REMPARMDESC g_aArgsPATMR3QueryOpcode[] =
Note:
See TracChangeset
for help on using the changeset viewer.