VirtualBox

Changeset 103684 in vbox


Ignore:
Timestamp:
Mar 5, 2024 3:27:02 PM (7 months ago)
Author:
vboxsync
Message:

Linux kernel modules: Fix UBSAN warnings by switching to flexible arrays where possible, bugref:10585.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VBoxTpG.h

    r98103 r103684  
    229229    uint8_t         fHaveLargeArgs;
    230230    uint8_t         abReserved[2];
    231     VTGDESCARG      aArgs[1];
     231    RT_FLEXIBLE_ARRAY_EXTENSION
     232    VTGDESCARG      aArgs[RT_FLEXIBLE_ARRAY];
    232233} VTGDESCARGLIST;
    233234/** Pointer to a VTG argument list descriptor. */
  • trunk/include/VBox/sup.h

    r98103 r103684  
    562562     * entry is updated. If @c u32Mode is SUPGIPMODE_SYNC_TSC the TSC frequency in
    563563     * @c u64CpuHz is copied to all CPUs. */
    564     SUPGIPCPU           aCPUs[1];
     564    RT_FLEXIBLE_ARRAY_EXTENSION
     565    SUPGIPCPU           aCPUs[RT_FLEXIBLE_ARRAY];
    565566} SUPGLOBALINFOPAGE;
    566567AssertCompileMemberAlignment(SUPGLOBALINFOPAGE, u64NanoTSLastUpdateHz, 8);
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp

    r101358 r103684  
    18481848            /* validate */
    18491849            PSUPLDRLOAD pReq = (PSUPLDRLOAD)pReqHdr;
     1850            uint8_t const * const pbSrcImage = pReq->u.In.abImage;
    18501851            REQ_CHECK_EXPR(Name, pReq->Hdr.cbIn >= SUP_IOCTL_LDR_LOAD_SIZE_IN(32));
    18511852            REQ_CHECK_SIZES_EX(SUP_IOCTL_LDR_LOAD, SUP_IOCTL_LDR_LOAD_SIZE_IN(pReq->u.In.cbImageWithEverything), SUP_IOCTL_LDR_LOAD_SIZE_OUT);
     
    18761877            {
    18771878                uint32_t i;
    1878                 PSUPLDRSYM paSyms = (PSUPLDRSYM)&pReq->u.In.abImage[pReq->u.In.offSymbols];
     1879                PSUPLDRSYM paSyms = (PSUPLDRSYM)(&pbSrcImage[pReq->u.In.offSymbols]);
    18791880                for (i = 0; i < pReq->u.In.cSymbols; i++)
    18801881                {
     
    18831884                    REQ_CHECK_EXPR_FMT(paSyms[i].offName < pReq->u.In.cbStrTab,
    18841885                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: name off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithEverything));
    1885                     REQ_CHECK_EXPR_FMT(RTStrEnd((char const *)&pReq->u.In.abImage[pReq->u.In.offStrTab + paSyms[i].offName],
     1886                    REQ_CHECK_EXPR_FMT(RTStrEnd((char const *)(&pbSrcImage[pReq->u.In.offStrTab + paSyms[i].offName]),
    18861887                                                pReq->u.In.cbStrTab - paSyms[i].offName),
    18871888                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: unterminated name! (%#lx / %#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithEverything));
     
    18911892                uint32_t i;
    18921893                uint32_t offPrevEnd = 0;
    1893                 PSUPLDRSEG paSegs = (PSUPLDRSEG)&pReq->u.In.abImage[pReq->u.In.offSegments];
     1894                PSUPLDRSEG paSegs = (PSUPLDRSEG)(&pbSrcImage[pReq->u.In.offSegments]);
    18941895                for (i = 0; i < pReq->u.In.cSegments; i++)
    18951896                {
     
    55505551    {
    55515552        size_t  cbSegments = pImage->cSegments * sizeof(SUPLDRSEG);
    5552         pImage->paSegments = (PSUPLDRSEG)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offSegments], cbSegments);
     5553        uint8_t const * const pbSrcImage = pReq->u.In.abImage;
     5554        pImage->paSegments = (PSUPLDRSEG)RTMemDup(&pbSrcImage[pReq->u.In.offSegments], cbSegments);
    55535555        if (pImage->paSegments) /* Align the last segment size to avoid upsetting RTR0MemObjProtect. */ /** @todo relax RTR0MemObjProtect */
    55545556            pImage->paSegments[pImage->cSegments - 1].cb = RT_ALIGN_32(pImage->paSegments[pImage->cSegments - 1].cb, PAGE_SIZE);
     
    56195621    if (!pImage->fNative)
    56205622    {
     5623        uint8_t const * const pbSrcImage = pReq->u.In.abImage;
    56215624        pImage->cbStrTab = pReq->u.In.cbStrTab;
    56225625        if (pImage->cbStrTab)
    56235626        {
    5624             pImage->pachStrTab = (char *)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offStrTab], pImage->cbStrTab);
     5627            pImage->pachStrTab = (char *)RTMemDup(&pbSrcImage[pReq->u.In.offStrTab], pImage->cbStrTab);
    56255628            if (!pImage->pachStrTab)
    56265629                rc = supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for string table: %#x", pImage->cbStrTab);
     
    56325635        {
    56335636            size_t  cbSymbols = pImage->cSymbols * sizeof(SUPLDRSYM);
    5634             pImage->paSymbols = (PSUPLDRSYM)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offSymbols], cbSymbols);
     5637            pImage->paSymbols = (PSUPLDRSYM)RTMemDup(&pbSrcImage[pReq->u.In.offSymbols], cbSymbols);
    56355638            if (!pImage->paSymbols)
    56365639                rc = supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for symbol table: %#x", cbSymbols);
  • trunk/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp

    r101358 r103684  
    9797    bool                    fRegistered;
    9898    /** The provider name (for logging purposes). */
    99     char                    szName[1];
     99    RT_FLEXIBLE_ARRAY_EXTENSION
     100    char                    szName[RT_FLEXIBLE_ARRAY];
    100101} SUPDRVTPPROVIDER;
    101102/** Pointer to the data for a tracepoint provider. */
     
    162163    uint32_t                cProbeLocs;
    163164    /** Ring-0 probe location info. */
    164     SUPDRVPROBELOC          aProbeLocs[1];
     165    RT_FLEXIBLE_ARRAY_EXTENSION
     166    SUPDRVPROBELOC          aProbeLocs[RT_FLEXIBLE_ARRAY];
    165167} SUPDRVTRACERUMOD;
    166168/** Magic value for SUPDRVVTGCOPY. */
  • trunk/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c

    r103168 r103684  
    145145    size_t              cPages;
    146146    /** Array of struct page pointers. (variable size) */
    147     struct page        *apPages[1];
     147    RT_FLEXIBLE_ARRAY_EXTENSION
     148    struct page        *apPages[RT_FLEXIBLE_ARRAY];
    148149} RTR0MEMOBJLNX;
    149150/** Pointer to the linux memory object. */
  • trunk/src/VBox/VMM/testcase/Makefile.kmk

    r103081 r103684  
    10941094                -e '/SUPDRVTRACERUSRCTX32_size$$/d' \
    10951095                -e '/HMCPU_size$$/d' \
     1096                -e '/SUPGLOBALINFOPAGE_size$$/d' \
    10961097                \
    10971098                -e '/^\(0x\)\{0,1\}00[0-9a-fA-F]* [aAnN] [^_.]*_size$$/!d' \
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