Changeset 85545 in vbox for trunk/src/VBox/HostDrivers/Support
- Timestamp:
- Jul 30, 2020 9:07:13 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp
r85543 r85545 5255 5255 pImage->paSegments[iSeg].fProt); 5256 5256 } 5257 if (iSeg >= pImage->cSegments) 5258 { 5259 supdrvLdrUnlock(pDevExt); 5260 return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq, 5261 "Bad entry point %p given for %s: no matching segment found (RVA %#zx)!", 5262 pv, pszSymbol, uRva); 5263 } 5257 5264 5258 5265 if (pImage->fNative) … … 5335 5342 } 5336 5343 5344 /* 5345 * Copy the segments before we start using supdrvLdrValidatePointer for entrypoint validation. 5346 */ 5347 pImage->cSegments = pReq->u.In.cSegments; 5348 { 5349 size_t cbSegments = pImage->cSegments * sizeof(SUPLDRSEG); 5350 pImage->paSegments = (PSUPLDRSEG)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offSegments], cbSegments); 5351 if (pImage->paSegments) /* Align the last segment size to avoid upsetting RTR0MemObjProtect. */ /** @todo relax RTR0MemObjProtect */ 5352 pImage->paSegments[pImage->cSegments - 1].cb = RT_ALIGN_32(pImage->paSegments[pImage->cSegments - 1].cb, PAGE_SIZE); 5353 else 5354 { 5355 supdrvLdrUnlock(pDevExt); 5356 return supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for segment table: %#x", cbSegments); 5357 } 5358 SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING); 5359 } 5360 5361 /* 5362 * Validate entrypoints. 5363 */ 5337 5364 switch (pReq->u.In.eEPType) 5338 5365 { … … 5404 5431 if (!pImage->paSymbols) 5405 5432 rc = supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for symbol table: %#x", cbSymbols); 5406 SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);5407 }5408 5409 pImage->cSegments = pReq->u.In.cSegments;5410 if (RT_SUCCESS(rc))5411 {5412 size_t cbSegments = pImage->cSegments * sizeof(SUPLDRSEG);5413 pImage->paSegments = (PSUPLDRSEG)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offSegments], cbSegments);5414 if (pImage->paSegments) /* Align the last segment size to avoid upsetting RTR0MemObjProtect. */ /** @todo relax RTR0MemObjProtect */5415 pImage->paSegments[pImage->cSegments - 1].cb = RT_ALIGN_32(pImage->paSegments[pImage->cSegments - 1].cb, PAGE_SIZE);5416 else5417 rc = supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for segment table: %#x", cbSegments);5418 5433 SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING); 5419 5434 }
Note:
See TracChangeset
for help on using the changeset viewer.