diff --git a/keymaster/4.0/support/fuzzer/keymaster4_utils_fuzzer.cpp b/keymaster/4.0/support/fuzzer/keymaster4_utils_fuzzer.cpp index bf074e824c..55c2630a2a 100644 --- a/keymaster/4.0/support/fuzzer/keymaster4_utils_fuzzer.cpp +++ b/keymaster/4.0/support/fuzzer/keymaster4_utils_fuzzer.cpp @@ -46,33 +46,42 @@ void KeyMaster4UtilsFuzzer::invokeKeyMasterUtils() { support::getOsVersion(); support::getOsPatchlevel(); - VerificationToken token; - token.challenge = mFdp->ConsumeIntegral(); - token.timestamp = mFdp->ConsumeIntegral(); - token.securityLevel = mFdp->PickValueInArray(kSecurityLevel); - size_t vectorSize = mFdp->ConsumeIntegralInRange(0, kMaxVectorSize); - token.mac.resize(vectorSize); - for (size_t n = 0; n < vectorSize; ++n) { - token.mac[n] = n; + while (mFdp->remaining_bytes() > 0) { + auto keymaster_function = mFdp->PickValueInArray>({ + [&]() { + VerificationToken token; + token.challenge = mFdp->ConsumeIntegral(); + token.timestamp = mFdp->ConsumeIntegral(); + token.securityLevel = mFdp->PickValueInArray(kSecurityLevel); + size_t vectorSize = mFdp->ConsumeIntegralInRange(0, kMaxVectorSize); + token.mac.resize(vectorSize); + for (size_t n = 0; n < vectorSize; ++n) { + token.mac[n] = mFdp->ConsumeIntegral(); + } + std::optional> serialized = + serializeVerificationToken(token); + if (serialized.has_value()) { + std::optional deserialized = + deserializeVerificationToken(serialized.value()); + } + }, + [&]() { + std::vector dataVector; + size_t size = mFdp->ConsumeIntegralInRange(0, sizeof(hw_auth_token_t)); + dataVector = mFdp->ConsumeBytes(size); + support::blob2hidlVec(dataVector.data(), dataVector.size()); + support::blob2hidlVec(dataVector); + HardwareAuthToken authToken = support::hidlVec2AuthToken(dataVector); + hidl_vec volatile hidlVector = support::authToken2HidlVec(authToken); + }, + [&]() { + std::string str = mFdp->ConsumeRandomLengthString(kMaxCharacters); + support::blob2hidlVec(str); + }, + }); + keymaster_function(); } - std::optional> serialized = serializeVerificationToken(token); - if (serialized.has_value()) { - std::optional deserialized = - deserializeVerificationToken(serialized.value()); - } - - std::vector dataVector; - size_t size = mFdp->ConsumeIntegralInRange(0, sizeof(hw_auth_token_t)); - dataVector = mFdp->ConsumeBytes(size); - support::blob2hidlVec(dataVector.data(), dataVector.size()); - - support::blob2hidlVec(dataVector); - - std::string str = mFdp->ConsumeRandomLengthString(kMaxCharacters); - support::blob2hidlVec(str); - - HardwareAuthToken authToken = support::hidlVec2AuthToken(dataVector); - hidl_vec volatile hidlVector = support::authToken2HidlVec(authToken); + return; } void KeyMaster4UtilsFuzzer::process(const uint8_t* data, size_t size) {