VirtualBox

Changeset 77913 in vbox for trunk


Ignore:
Timestamp:
Mar 27, 2019 12:14:54 PM (6 years ago)
Author:
vboxsync
Message:

Runtmie/dbgmoddwarf.cpp: Fix possible memory leak in error case and possible NULL pointer dereference when parsing an empty tag descriptor bugref:9188

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp

    r76553 r77913  
    649649{
    650650#define TAGDESC(a_Name, a_pDesc)        { DW_ ## a_Name, #a_Name, a_pDesc }
    651 #define TAGDESC_EMPTY()                 { 0, NULL, NULL }
     651#define TAGDESC_EMPTY()                 { 0, NULL, &g_CoreDieDesc }
    652652#define TAGDESC_CORE(a_Name)            TAGDESC(a_Name, &g_CoreDieDesc)
    653653    TAGDESC_EMPTY(),                            /* 0x00 */
     
    61876187                        rc = rtDwarfLine_ExplodeAll(pThis);
    61886188                }
     6189
     6190                /*
     6191                 * Free the cached abbreviations and unload all sections.
     6192                 */
     6193                pThis->cCachedAbbrevsAlloced = 0;
     6194                RTMemFree(pThis->paCachedAbbrevs);
     6195                pThis->paCachedAbbrevs = NULL;
     6196
     6197                for (unsigned iSect = 0; iSect < RT_ELEMENTS(pThis->aSections); iSect++)
     6198                    if (pThis->aSections[iSect].pv)
     6199                        pThis->pDbgInfoMod->pImgVt->pfnUnmapPart(pThis->pDbgInfoMod, pThis->aSections[iSect].cb,
     6200                                                                 &pThis->aSections[iSect].pv);
     6201
    61896202                if (RT_SUCCESS(rc))
    61906203                {
    6191                     /*
    6192                      * Free the cached abbreviations and unload all sections.
    6193                      */
    6194                     pThis->cCachedAbbrevsAlloced = 0;
    6195                     RTMemFree(pThis->paCachedAbbrevs);
    6196                     pThis->paCachedAbbrevs = NULL;
    6197 
    6198                     for (unsigned iSect = 0; iSect < RT_ELEMENTS(pThis->aSections); iSect++)
    6199                         if (pThis->aSections[iSect].pv)
    6200                             pThis->pDbgInfoMod->pImgVt->pfnUnmapPart(pThis->pDbgInfoMod, pThis->aSections[iSect].cb,
    6201                                                                      &pThis->aSections[iSect].pv);
    6202 
    62036204                    /** @todo Kill pThis->CompileUnitList and the alloc caches. */
    62046205                    return VINF_SUCCESS;
     
    62146215    }
    62156216
    6216     RTMemFree(pThis->paCachedAbbrevs);
     6217    if (pThis->paCachedAbbrevs)
     6218        RTMemFree(pThis->paCachedAbbrevs);
     6219    pThis->paCachedAbbrevs = NULL;
     6220
     6221    for (unsigned iSect = 0; iSect < RT_ELEMENTS(pThis->aSections); iSect++)
     6222        if (pThis->aSections[iSect].pv)
     6223            pThis->pDbgInfoMod->pImgVt->pfnUnmapPart(pThis->pDbgInfoMod, pThis->aSections[iSect].cb,
     6224                                                     &pThis->aSections[iSect].pv);
    62176225
    62186226#ifdef RTDBGMODDWARF_WITH_MEM_CACHE
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