VirtualBox

Changeset 7244 in vbox


Ignore:
Timestamp:
Mar 3, 2008 4:21:39 PM (17 years ago)
Author:
vboxsync
Message:

Fixed corruption in RTMemExecAlloc when fencing was enabled (RT_STRICT/RTR0MEM_STRICT).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/alloc-r0drv.cpp

    r7042 r7244  
    122122#ifdef RTR0MEM_STRICT
    123123        pHdr->cbReq = cb;
    124         memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], sizeof(g_abFence));
     124        memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA);
    125125#endif
    126126        return pHdr + 1;
     
    148148#ifdef RTR0MEM_STRICT
    149149        pHdr->cbReq = cb;
    150         memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], sizeof(g_abFence));
     150        memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA);
    151151        return memset(pHdr + 1, 0, cb);
    152152#else
     
    187187#ifdef RTR0MEM_STRICT
    188188                pHdrNew->cbReq = cbNew;
    189                 memcpy((uint8_t *)(pHdrNew + 1) + cbNew, &g_abFence[0], sizeof(g_abFence));
    190                 AssertReleaseMsg(!memcmp((uint8_t *)(pHdrOld + 1) + pHdrOld->cbReq, &g_abFence[0], sizeof(g_abFence)),
     189                memcpy((uint8_t *)(pHdrNew + 1) + cbNew, &g_abFence[0], RTR0MEM_FENCE_EXTRA);
     190                AssertReleaseMsg(!memcmp((uint8_t *)(pHdrOld + 1) + pHdrOld->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA),
    191191                                 ("pHdr=%p pvOld=%p cb=%zu cbNew=%zu\n"
    192192                                  "fence:    %.*Rhxs\n"
    193193                                  "expected: %.*Rhxs\n",
    194194                                  pHdrOld, pvOld, pHdrOld->cb, cbNew,
    195                                   sizeof(g_abFence), (uint8_t *)(pHdrOld + 1) + pHdrOld->cb,
    196                                   sizeof(g_abFence), &g_abFence[0]));
     195                                  RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdrOld + 1) + pHdrOld->cb,
     196                                  RTR0MEM_FENCE_EXTRA, &g_abFence[0]));
    197197#endif
    198198                rtMemFree(pHdrOld);
     
    223223        Assert(!(pHdr->fFlags & RTMEMHDR_FLAG_EXEC));
    224224#ifdef RTR0MEM_STRICT
    225         AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], sizeof(g_abFence)),
     225        AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA),
    226226                         ("pHdr=%p pv=%p cb=%zu\n"
    227227                          "fence:    %.*Rhxs\n"
    228228                          "expected: %.*Rhxs\n",
    229229                          pHdr, pv, pHdr->cb, pv,
    230                           sizeof(g_abFence), (uint8_t *)(pHdr + 1) + pHdr->cb,
    231                           sizeof(g_abFence), &g_abFence[0]));
     230                          RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdr + 1) + pHdr->cb,
     231                          RTR0MEM_FENCE_EXTRA, &g_abFence[0]));
    232232#endif
    233233        rtMemFree(pHdr);
     
    247247RTDECL(void *)    RTMemExecAlloc(size_t cb)
    248248{
    249     PRTMEMHDR pHdr = rtMemAlloc(cb, RTMEMHDR_FLAG_EXEC);
     249    PRTMEMHDR pHdr = rtMemAlloc(cb + RTR0MEM_FENCE_EXTRA, RTMEMHDR_FLAG_EXEC);
    250250    if (pHdr)
    251251    {
    252252#ifdef RTR0MEM_STRICT
    253         memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], sizeof(g_abFence));
     253        memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA);
    254254#endif
    255255        return pHdr + 1;
     
    273273    {
    274274#ifdef RTR0MEM_STRICT
    275         AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], sizeof(g_abFence)),
     275        AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA),
    276276                         ("pHdr=%p pv=%p cb=%zu\n"
    277277                          "fence:    %.*Rhxs\n"
    278278                          "expected: %.*Rhxs\n",
    279279                          pHdr, pv, pHdr->cb,
    280                           sizeof(g_abFence), (uint8_t *)(pHdr + 1) + pHdr->cb,
    281                           sizeof(g_abFence), &g_abFence[0]));
     280                          RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdr + 1) + pHdr->cb,
     281                          RTR0MEM_FENCE_EXTRA, &g_abFence[0]));
    282282#endif
    283283        rtMemFree(pHdr);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette