- Timestamp:
- Mar 25, 2020 7:40:59 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 136646
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/testcase/tstDeviceSsmFuzz.cpp
r83296 r83427 104 104 if (RT_SUCCESS(rc)) 105 105 { 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); 115 108 if (RT_SUCCESS(rc)) 116 109 { 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)) 119 119 { 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 122 131 { 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)) 126 135 { 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; 133 138 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)) 138 141 { 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) 142 151 { 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); 145 157 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); 153 167 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); 180 169 } 170 else 171 rc = VERR_NO_MEMORY; 181 172 } 182 173
Note:
See TracChangeset
for help on using the changeset viewer.