VirtualBox

Changeset 83427 in vbox for trunk


Ignore:
Timestamp:
Mar 25, 2020 7:40:59 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136646
Message:

Devices/testcase/tstDeviceSsmFuzz: Use new fuzzing config API

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/testcase/tstDeviceSsmFuzz.cpp

    r83296 r83427  
    104104    if (RT_SUCCESS(rc))
    105105    {
    106         uint64_t cbMutateRange = tstDevSsmFuzzGetCfgU64(paCfg, cCfgItems, "OffMutateSize");
    107         if (!cbMutateRange)
    108             cbMutateRange = UINT64_MAX;
    109 
    110         rc = RTFuzzCtxCfgSetMutationRange(hFuzzCtx,
    111                                           tstDevSsmFuzzGetCfgU64(paCfg, cCfgItems, "OffMutateStart"),
    112                                           cbMutateRange);
    113         if (RT_SUCCESS(rc))
    114             rc = RTFuzzCtxCorpusInputAddFromDirPath(hFuzzCtx, tstDevSsmFuzzGetCfgString(paCfg, cCfgItems, "CorpusPath"));
     106        RTFUZZCFG hFuzzCfg;
     107        rc = RTFuzzCfgCreateFromFile(&hFuzzCfg, tstDevSsmFuzzGetCfgString(paCfg, cCfgItems, "CorpusPath"), NULL);
    115108        if (RT_SUCCESS(rc))
    116109        {
    117             rc = RTFuzzCtxCfgSetInputSeedMaximum(hFuzzCtx, (size_t)tstDevSsmFuzzGetCfgU64(paCfg, cCfgItems, "InputSizeMax"));
    118             if (RT_SUCCESS(rc))
     110            rc = RTFuzzCfgImport(hFuzzCfg, hFuzzCtx, RTFUZZCFG_IMPORT_F_DEFAULT);
     111            RTFuzzCfgRelease(hFuzzCfg);
     112        }
     113
     114        if (RT_SUCCESS(rc))
     115        {
     116            /* Create a new SSM handle to use. */
     117            PSSMHANDLE pSsm = (PSSMHANDLE)RTMemAllocZ(sizeof(*pSsm));
     118            if (RT_LIKELY(pSsm))
    119119            {
    120                 rc = RTFuzzCtxReseed(hFuzzCtx, tstDevSsmFuzzGetCfgU64(paCfg, cCfgItems, "Seed"));
    121                 if (RT_SUCCESS(rc))
     120                pSsm->pDut          = hDut;
     121                pSsm->pbSavedState  = NULL;
     122                pSsm->cbSavedState  = 0;
     123                pSsm->offDataBuffer = 0;
     124                pSsm->uCurUnitVer   = tstDevSsmFuzzGetCfgU32(paCfg, cCfgItems, "UnitVersion");
     125                pSsm->rc            = VINF_SUCCESS;
     126
     127                uint64_t cRuntimeMs = tstDevSsmFuzzGetCfgU64(paCfg, cCfgItems, "RuntimeSec") * RT_MS_1SEC_64;
     128                uint64_t tsStart = RTTimeMilliTS();
     129                uint64_t cFuzzedInputs = 0;
     130                do
    122131                {
    123                     /* Create a new SSM handle to use. */
    124                     PSSMHANDLE pSsm = (PSSMHANDLE)RTMemAllocZ(sizeof(*pSsm));
    125                     if (RT_LIKELY(pSsm))
     132                    RTFUZZINPUT hFuzzInp;
     133                    rc = RTFuzzCtxInputGenerate(hFuzzCtx, &hFuzzInp);
     134                    if (RT_SUCCESS(rc))
    126135                    {
    127                         pSsm->pDut          = hDut;
    128                         pSsm->pbSavedState  = NULL;
    129                         pSsm->cbSavedState  = 0;
    130                         pSsm->offDataBuffer = 0;
    131                         pSsm->uCurUnitVer   = tstDevSsmFuzzGetCfgU32(paCfg, cCfgItems, "UnitVersion");
    132                         pSsm->rc            = VINF_SUCCESS;
     136                        void *pvBlob = NULL;
     137                        size_t cbBlob = 0;
    133138
    134                         uint64_t cRuntimeMs = tstDevSsmFuzzGetCfgU64(paCfg, cCfgItems, "RuntimeSec") * RT_MS_1SEC_64;
    135                         uint64_t tsStart = RTTimeMilliTS();
    136                         uint64_t cFuzzedInputs = 0;
    137                         do
     139                        rc = RTFuzzInputQueryBlobData(hFuzzInp, &pvBlob, &cbBlob);
     140                        if (RT_SUCCESS(rc))
    138141                        {
    139                             RTFUZZINPUT hFuzzInp;
    140                             rc = RTFuzzCtxInputGenerate(hFuzzCtx, &hFuzzInp);
    141                             if (RT_SUCCESS(rc))
     142                            pSsm->pbSavedState  = (uint8_t *)pvBlob;
     143                            pSsm->cbSavedState  = cbBlob;
     144                            pSsm->offDataBuffer = 0;
     145                            pSsm->rc            = VINF_SUCCESS;
     146
     147                            /* Get the SSM handler from the device. */
     148                            int rcDut = VINF_SUCCESS;
     149                            PTSTDEVDUTSSM pSsmClbks = RTListGetFirst(&hDut->LstSsmHandlers, TSTDEVDUTSSM, NdSsm);
     150                            if (pSsmClbks)
    142151                            {
    143                                 void *pvBlob = NULL;
    144                                 size_t cbBlob = 0;
     152                                /* Load preparations. */
     153                                if (pSsmClbks->pfnLoadPrep)
     154                                    rcDut = pSsmClbks->pfnLoadPrep(hDut->pDevIns, pSsm);
     155                                if (RT_SUCCESS(rcDut))
     156                                    rcDut = pSsmClbks->pfnLoadExec(hDut->pDevIns, pSsm, pSsm->uCurUnitVer, SSM_PASS_FINAL);
    145157
    146                                 rc = RTFuzzInputQueryBlobData(hFuzzInp, &pvBlob, &cbBlob);
    147                                 if (RT_SUCCESS(rc))
    148                                 {
    149                                     pSsm->pbSavedState  = (uint8_t *)pvBlob;
    150                                     pSsm->cbSavedState  = cbBlob;
    151                                     pSsm->offDataBuffer = 0;
    152                                     pSsm->rc            = VINF_SUCCESS;
     158                                cFuzzedInputs++;
     159                            }
     160                            if (RT_SUCCESS(rcDut))
     161                                RTFuzzInputAddToCtxCorpus(hFuzzInp);
     162                        }
     163                        RTFuzzInputRelease(hFuzzInp);
     164                    }
     165                } while (   RT_SUCCESS(rc)
     166                         && RTTimeMilliTS() - tsStart < cRuntimeMs);
    153167
    154                                     /* Get the SSM handler from the device. */
    155                                     int rcDut = VINF_SUCCESS;
    156                                     PTSTDEVDUTSSM pSsmClbks = RTListGetFirst(&hDut->LstSsmHandlers, TSTDEVDUTSSM, NdSsm);
    157                                     if (pSsmClbks)
    158                                     {
    159                                         /* Load preparations. */
    160                                         if (pSsmClbks->pfnLoadPrep)
    161                                             rcDut = pSsmClbks->pfnLoadPrep(hDut->pDevIns, pSsm);
    162                                         if (RT_SUCCESS(rcDut))
    163                                             rcDut = pSsmClbks->pfnLoadExec(hDut->pDevIns, pSsm, pSsm->uCurUnitVer, SSM_PASS_FINAL);
    164 
    165                                         cFuzzedInputs++;
    166                                     }
    167                                     if (RT_SUCCESS(rcDut))
    168                                         RTFuzzInputAddToCtxCorpus(hFuzzInp);
    169                                 }
    170                                 RTFuzzInputRelease(hFuzzInp);
    171                             }
    172                         } while (   RT_SUCCESS(rc)
    173                                  && RTTimeMilliTS() - tsStart < cRuntimeMs);
    174 
    175                         RTMemFree(pSsm);
    176                     }
    177                     else
    178                         rc = VERR_NO_MEMORY;
    179                 }
     168                RTMemFree(pSsm);
    180169            }
     170            else
     171                rc = VERR_NO_MEMORY;
    181172        }
    182173
Note: See TracChangeset for help on using the changeset viewer.

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