Changeset 71591 in vbox for trunk/src/VBox/GuestHost/HGSMI
- Timestamp:
- Mar 31, 2018 6:40:01 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 121580
- Location:
- trunk/src/VBox/GuestHost/HGSMI
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
r70605 r71591 89 89 } 90 90 91 static uint32_t hgsmiHashProcess(uint32_t hash, 92 const void *pvData, 93 size_t cbData) 91 static uint32_t hgsmiHashProcess(uint32_t hash, const void RT_UNTRUSTED_VOLATILE_HSTGST *pvData, size_t cbData) 94 92 { 95 93 const uint8_t *pu8Data = (const uint8_t *)pvData; … … 114 112 } 115 113 116 uint32_t HGSMIChecksum(HGSMIOFFSET offBuffer, 117 const HGSMIBUFFERHEADER *pHeader, 118 const HGSMIBUFFERTAIL *pTail) 114 uint32_t HGSMIChecksum(HGSMIOFFSET offBuffer, const HGSMIBUFFERHEADER RT_UNTRUSTED_VOLATILE_HSTGST *pHeader, 115 const HGSMIBUFFERTAIL RT_UNTRUSTED_VOLATILE_HSTGST *pTail) 119 116 { 120 117 uint32_t u32Checksum = hgsmiHashBegin(); … … 127 124 } 128 125 129 int HGSMIAreaInitialize(HGSMIAREA *pArea, 130 void *pvBase, 131 HGSMISIZE cbArea, 132 HGSMIOFFSET offBase) 126 int HGSMIAreaInitialize(HGSMIAREA *pArea, void *pvBase, HGSMISIZE cbArea, HGSMIOFFSET offBase) 133 127 { 134 128 uint8_t *pu8Base = (uint8_t *)pvBase; … … 198 192 RT_ZERO(pHeader->u.au8Union); 199 193 200 HGSMIBUFFERTAIL *pTail = HGSMIBufferTailFromPtr(pHeader, u32DataSize);194 HGSMIBUFFERTAIL RT_UNTRUSTED_VOLATILE_HSTGST *pTail = HGSMIBufferTailFromPtr(pHeader, u32DataSize); 201 195 pTail->u32Reserved = 0; 202 196 pTail->u32Checksum = HGSMIChecksum(offBuffer, pHeader, pTail); … … 205 199 } 206 200 207 int HGSMIHeapSetup(HGSMIHEAP *pHeap, 208 void *pvBase, 209 HGSMISIZE cbArea, 210 HGSMIOFFSET offBase, 211 const HGSMIENV *pEnv) 201 int HGSMIHeapSetup(HGSMIHEAP *pHeap, void *pvBase, HGSMISIZE cbArea, HGSMIOFFSET offBase, const HGSMIENV *pEnv) 212 202 { 213 203 HGSMI_ASSERT_PTR_RETURN(pHeap, VERR_INVALID_PARAMETER); … … 236 226 } 237 227 238 void *HGSMIHeapAlloc(HGSMIHEAP *pHeap,239 HGSMISIZE cbData,240 uint8_t u8Channel,241 uint16_t u16ChannelInfo)228 void RT_UNTRUSTED_VOLATILE_HOST *HGSMIHeapAlloc(HGSMIHEAP *pHeap, 229 HGSMISIZE cbData, 230 uint8_t u8Channel, 231 uint16_t u16ChannelInfo) 242 232 { 243 233 HGSMISIZE cbAlloc = HGSMIBufferRequiredSize(cbData); … … 257 247 } 258 248 259 void HGSMIHeapFree(HGSMIHEAP *pHeap, 260 void *pvData) 249 void HGSMIHeapFree(HGSMIHEAP *pHeap, void RT_UNTRUSTED_VOLATILE_GUEST *pvData) 261 250 { 262 251 if (pvData) 263 252 { 264 HGSMIBUFFERHEADER *pHeader = HGSMIBufferHeaderFromData(pvData);253 HGSMIBUFFERHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader = HGSMIBufferHeaderFromData(pvData); 265 254 HGSMIHeapBufferFree(pHeap, pHeader); 266 255 } 267 256 } 268 257 269 void *HGSMIHeapBufferAlloc(HGSMIHEAP *pHeap, 270 HGSMISIZE cbBuffer) 271 { 272 void *pvBuf = HGSMIMAAlloc(&pHeap->ma, cbBuffer); 273 return pvBuf; 274 } 275 276 void HGSMIHeapBufferFree(HGSMIHEAP *pHeap, 277 void *pvBuf) 258 void RT_UNTRUSTED_VOLATILE_HSTGST *HGSMIHeapBufferAlloc(HGSMIHEAP *pHeap, HGSMISIZE cbBuffer) 259 { 260 return HGSMIMAAlloc(&pHeap->ma, cbBuffer); 261 } 262 263 void HGSMIHeapBufferFree(HGSMIHEAP *pHeap, void RT_UNTRUSTED_VOLATILE_GUEST *pvBuf) 278 264 { 279 265 HGSMIMAFree(&pHeap->ma, pvBuf); … … 282 268 typedef struct HGSMIBUFFERCONTEXT 283 269 { 284 const volatile HGSMIBUFFERHEADER *pHeader; /**< The original buffer header. */ 285 void *pvData; /**< Payload data in the buffer./ */ 286 uint32_t cbData; /**< Size of data */ 270 /** The original buffer header. */ 271 const HGSMIBUFFERHEADER RT_UNTRUSTED_VOLATILE_HSTGST *pHeader; 272 /** Payload data in the buffer. */ 273 void RT_UNTRUSTED_VOLATILE_HSTGST *pvData; 274 /** Size of data */ 275 uint32_t cbData; 287 276 } HGSMIBUFFERCONTEXT; 288 277 … … 294 283 * @param pBufferContext Where to write information about the buffer. 295 284 */ 296 static int hgsmiVerifyBuffer(const HGSMIAREA *pArea, 297 HGSMIOFFSET offBuffer, 298 HGSMIBUFFERCONTEXT *pBufferContext) 285 static int hgsmiVerifyBuffer(const HGSMIAREA *pArea, HGSMIOFFSET offBuffer, HGSMIBUFFERCONTEXT *pBufferContext) 299 286 { 300 287 // LogFlowFunc(("buffer 0x%x, area %p %x [0x%x;0x%x]\n", … … 313 300 else 314 301 { 315 void *pvBuffer = HGSMIOffsetToPointer(pArea, offBuffer); 316 HGSMIBUFFERHEADER header = *HGSMIBufferHeaderFromPtr(pvBuffer); 302 void RT_UNTRUSTED_VOLATILE_HSTGST *pvBuffer = HGSMIOffsetToPointer(pArea, offBuffer); 303 HGSMIBUFFERHEADER header; 304 memcpy(&header, (void *)HGSMIBufferHeaderFromPtr(pvBuffer), sizeof(header)); 317 305 ASMCompilerBarrier(); 318 306 … … 325 313 if (header.u32DataSize <= pArea->offLast - offBuffer) 326 314 { 327 HGSMIBUFFERTAIL tail = *HGSMIBufferTailFromPtr(pvBuffer, header.u32DataSize); 315 HGSMIBUFFERTAIL tail; 316 memcpy(&tail, (void *)HGSMIBufferTailFromPtr(pvBuffer, header.u32DataSize), sizeof(tail)); 328 317 ASMCompilerBarrier(); 329 318 -
trunk/src/VBox/GuestHost/HGSMI/HGSMIMemAlloc.cpp
r69634 r71591 575 575 } 576 576 577 HGSMIOFFSET HGSMIMAPointerToOffset(const HGSMIMADATA *pMA, const void *pv) 578 { 579 if (HGSMIAreaContainsPointer(&pMA->area, pv)) 580 { 581 return HGSMIPointerToOffset(&pMA->area, pv); 582 } 577 HGSMIOFFSET HGSMIMAPointerToOffset(const HGSMIMADATA *pMA, const void RT_UNTRUSTED_VOLATILE_GUEST *pv) 578 { 579 uintptr_t off = (uintptr_t)pv - (uintptr_t)pMA->area.pu8Base; 580 if (off < pMA->area.cbArea) 581 return pMA->area.offBase + off; 583 582 584 583 HGSMI_ASSERT_FAILED(); … … 586 585 } 587 586 588 void*HGSMIMAOffsetToPointer(const HGSMIMADATA *pMA, HGSMIOFFSET off)587 static void RT_UNTRUSTED_VOLATILE_HSTGST *HGSMIMAOffsetToPointer(const HGSMIMADATA *pMA, HGSMIOFFSET off) 589 588 { 590 589 if (HGSMIAreaContainsOffset(&pMA->area, off)) … … 597 596 } 598 597 599 void *HGSMIMAAlloc(HGSMIMADATA *pMA, HGSMISIZE cb)598 void RT_UNTRUSTED_VOLATILE_HSTGST *HGSMIMAAlloc(HGSMIMADATA *pMA, HGSMISIZE cb) 600 599 { 601 600 HGSMIOFFSET off = hgsmiMAAlloc(pMA, cb); … … 603 602 } 604 603 605 void HGSMIMAFree(HGSMIMADATA *pMA, void *pv)604 void HGSMIMAFree(HGSMIMADATA *pMA, void RT_UNTRUSTED_VOLATILE_GUEST *pv) 606 605 { 607 606 HGSMIOFFSET off = HGSMIMAPointerToOffset(pMA, pv);
Note:
See TracChangeset
for help on using the changeset viewer.