diff --git a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn index 4c71160b081c3a2dd4e41b58871ea51efaf51283..398162fcc317b76037c3d3ce7bb6fe90e603c982 100644 --- a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/BUILD.gn @@ -37,6 +37,7 @@ ohos_fuzztest("UdmfServiceFuzzTest") { "-O0", "-Wno-unused-variable", "-fno-omit-frame-pointer", + "-fno-access-control" ] sources = [ "udmfservice_fuzzer.cpp" ] diff --git a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp index 36e912c65ffed9aef2e623eafb5e72302d32c989..5c5ba402441df3e9e610cad29d90c7490c30157e 100644 --- a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp +++ b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp @@ -37,19 +37,20 @@ constexpr size_t NUM_MIN = 5; constexpr size_t NUM_MAX = 12; static constexpr int ID_LEN = 32; static constexpr int MINIMUM = 48; +static constexpr int MAXIMUM = 121; QueryOption GenerateFuzzQueryOption(FuzzedDataProvider &provider) { std::vector groupId(ID_LEN, '0'); for (size_t i = 0; i < groupId.size(); ++i) { - groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MINIMUM); + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); } std::string groupIdStr(groupId.begin(), groupId.end()); UnifiedKey udKey = UnifiedKey("drag", "com.test.demo", groupIdStr); - QueryOption query = { - .key = udKey.GetUnifiedKey(), - .intention = Intention::UD_INTENTION_DRAG - }; + QueryOption query; + query.key = udKey.GetUnifiedKey(); + query.intention = Intention::UD_INTENTION_DRAG; + query.tokenId = provider.ConsumeIntegral(); return query; } @@ -68,6 +69,9 @@ bool OnRemoteRequestFuzz(FuzzedDataProvider &provider) request.RewindRead(0); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(code, request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; return true; } @@ -84,7 +88,7 @@ void SetDataFuzz(FuzzedDataProvider &provider) std::shared_ptr obj = std::make_shared(); obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; obj->value_[FILE_URI_PARAM] = svalue; - obj->value_[FILE_TYPE] = "abcdefg"; + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); auto record = std::make_shared(FILE_URI, obj); data1.AddRecord(record); MessageParcel request; @@ -92,6 +96,9 @@ void SetDataFuzz(FuzzedDataProvider &provider) ITypesUtil::Marshal(request, option1, data1); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::SET_DATA), request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void GetDataFuzz(FuzzedDataProvider &provider) @@ -106,6 +113,9 @@ void GetDataFuzz(FuzzedDataProvider &provider) ITypesUtil::Marshal(request, query); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::GET_DATA), request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void GetBatchDataFuzz(FuzzedDataProvider &provider) @@ -120,6 +130,9 @@ void GetBatchDataFuzz(FuzzedDataProvider &provider) ITypesUtil::Marshal(request, query); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::GET_BATCH_DATA), request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void UpdateDataFuzz(FuzzedDataProvider &provider) @@ -134,7 +147,7 @@ void UpdateDataFuzz(FuzzedDataProvider &provider) std::shared_ptr obj = std::make_shared(); obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; obj->value_[FILE_URI_PARAM] = svalue; - obj->value_[FILE_TYPE] = "abcdefg"; + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); auto record = std::make_shared(FILE_URI, obj); data1.AddRecord(record); MessageParcel request; @@ -142,6 +155,9 @@ void UpdateDataFuzz(FuzzedDataProvider &provider) ITypesUtil::Marshal(request, query, data1); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::UPDATE_DATA), request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void DeleteDataFuzz(FuzzedDataProvider &provider) @@ -156,6 +172,9 @@ void DeleteDataFuzz(FuzzedDataProvider &provider) ITypesUtil::Marshal(request, query); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::DELETE_DATA), request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void GetSummaryFuzz(FuzzedDataProvider &provider) @@ -170,6 +189,9 @@ void GetSummaryFuzz(FuzzedDataProvider &provider) ITypesUtil::Marshal(request, query); MessageParcel reply; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::GET_SUMMARY), request, reply); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void AddPrivilegeDataFuzz(FuzzedDataProvider &provider) @@ -192,6 +214,9 @@ void AddPrivilegeDataFuzz(FuzzedDataProvider &provider) MessageParcel replyUpdate; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::ADD_PRIVILEGE), request, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void SyncDataFuzz(FuzzedDataProvider &provider) @@ -208,6 +233,9 @@ void SyncDataFuzz(FuzzedDataProvider &provider) MessageParcel replyUpdate; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::SYNC), requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void IsRemoteDataFuzz(FuzzedDataProvider &provider) @@ -223,6 +251,9 @@ void IsRemoteDataFuzz(FuzzedDataProvider &provider) MessageParcel replyUpdate; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::IS_REMOTE_DATA), requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void ObtainAsynProcessFuzz(FuzzedDataProvider &provider) @@ -245,6 +276,9 @@ void ObtainAsynProcessFuzz(FuzzedDataProvider &provider) MessageParcel replyUpdate; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::OBTAIN_ASYN_PROCESS), requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; } void ClearAsynProcessFuzz(FuzzedDataProvider &provider) @@ -264,6 +298,283 @@ void ClearAsynProcessFuzz(FuzzedDataProvider &provider) MessageParcel replyUpdate; udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::CLEAR_ASYN_PROCESS_BY_KEY), requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void SetDelayInfoFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr executor = std::make_shared(NUM_MAX, NUM_MIN); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), std::move(executor) }); + MessageParcel requestUpdate; + requestUpdate.WriteInterfaceToken(INTERFACE_TOKEN); + DataLoadInfo dataLoadInfo; + dataLoadInfo.recordCount = provider.ConsumeIntegral(); + dataLoadInfo.types.emplace(provider.ConsumeRandomLengthString()); + dataLoadInfo.sequenceKey = provider.ConsumeRandomLengthString(); + ITypesUtil::Marshal(requestUpdate, dataLoadInfo); + sptr iUdmfNotifier = nullptr; + ITypesUtil::Marshal(requestUpdate, iUdmfNotifier); + MessageParcel replyUpdate; + udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::SET_DELAY_INFO), + requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void PushDelayDataFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr executor = std::make_shared(NUM_MAX, NUM_MIN); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), std::move(executor) }); + + MessageParcel requestUpdate; + requestUpdate.WriteInterfaceToken(INTERFACE_TOKEN); + std::string key = provider.ConsumeRandomLengthString(); + ITypesUtil::Marshal(requestUpdate, key); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + ITypesUtil::Marshal(requestUpdate, data); + + MessageParcel replyUpdate; + udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::SET_DELAY_DATA), + requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void GetDataIfAvailableFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr executor = std::make_shared(NUM_MAX, NUM_MIN); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), std::move(executor) }); + + MessageParcel requestUpdate; + requestUpdate.WriteInterfaceToken(INTERFACE_TOKEN); + std::string key = provider.ConsumeRandomLengthString(); + ITypesUtil::Marshal(requestUpdate, key); + DataLoadInfo dataLoadInfo; + dataLoadInfo.recordCount = provider.ConsumeIntegral(); + dataLoadInfo.types.emplace(provider.ConsumeRandomLengthString()); + dataLoadInfo.sequenceKey = provider.ConsumeRandomLengthString(); + ITypesUtil::Marshal(requestUpdate, dataLoadInfo); + sptr iUdmfNotifier = nullptr; + ITypesUtil::Marshal(requestUpdate, iUdmfNotifier); + + MessageParcel replyUpdate; + udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::GET_DELAY_DATA), + requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void OnGetAppShareOptionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr executor = std::make_shared(NUM_MAX, NUM_MIN); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), std::move(executor) }); + + MessageParcel requestUpdate; + requestUpdate.WriteInterfaceToken(INTERFACE_TOKEN); + CustomOption option = {.intention = Intention::UD_INTENTION_DRAG}; + std::string intention = UD_INTENTION_MAP.at(option.intention); + ITypesUtil::Marshal(requestUpdate, intention); + + MessageParcel replyUpdate; + udmfServiceImpl->OnRemoteRequest(static_cast(UdmfServiceInterfaceCode::GET_APP_SHARE_OPTION), + requestUpdate, replyUpdate); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void CheckDragParamsFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + std::string bundleName = provider.ConsumeRandomLengthString(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey(intention, bundleName, groupIdStr); + QueryOption query; + udmfServiceImpl->CheckDragParams(udKey, query); +} + +void IsPermissionInCacheFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + QueryOption query = GenerateFuzzQueryOption(provider); + udmfServiceImpl->IsPermissionInCache(query); +} + +void IsReadAndKeepFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + Privilege privilege = { + .tokenId = provider.ConsumeIntegral(), + .readPermission = "read", + .writePermission = "write" + }; + Privilege privilege2 = { + .tokenId = provider.ConsumeIntegral(), + .readPermission = "readAndKeep", + .writePermission = "write" + }; + std::vector privileges = { privilege, privilege2 }; + QueryOption query = GenerateFuzzQueryOption(provider); + udmfServiceImpl->IsReadAndKeep(privileges, query); +} + +void ProcessUriFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + QueryOption query = GenerateFuzzQueryOption(provider); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + udmfServiceImpl->ProcessUri(query, data); +} + +void ProcessCrossDeviceDataFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + uint32_t tokenId = provider.ConsumeIntegral(); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + std::vector uris; + udmfServiceImpl->ProcessCrossDeviceData(tokenId, data, uris); +} + +void ResolveAutoLaunchFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr executor = std::make_shared(NUM_MAX, NUM_MIN); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), std::move(executor) }); + auto identifier = provider.ConsumeRandomLengthString(); + UdmfServiceImpl::DBLaunchParam param; + param.userId = provider.ConsumeRandomLengthString(); + param.appId = provider.ConsumeRandomLengthString(); + param.storeId = provider.ConsumeRandomLengthString(); + param.path = provider.ConsumeRandomLengthString(); + udmfServiceImpl->ResolveAutoLaunch(identifier, param); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void HasDatahubPriviledgeFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + auto bundleName = provider.ConsumeRandomLengthString(); + udmfServiceImpl->HasDatahubPriviledge(bundleName); +} + +void OnUserChangeFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + uint32_t code = provider.ConsumeIntegral(); + auto user = provider.ConsumeRandomLengthString(); + auto account = provider.ConsumeRandomLengthString(); + udmfServiceImpl->OnUserChange(code, user, account); +} + +void IsNeedTransferDeviceTypeFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + QueryOption query = GenerateFuzzQueryOption(provider); + udmfServiceImpl->IsNeedTransferDeviceType(query); +} + +void CheckAddPrivilegePermissionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + std::string bundleName = provider.ConsumeRandomLengthString(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey(intention, bundleName, groupIdStr); + std::string processName = provider.ConsumeRandomLengthString(); + QueryOption query = GenerateFuzzQueryOption(provider); + udmfServiceImpl->CheckAddPrivilegePermission(udKey, processName, query); +} + +void ProcessDataFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + QueryOption query = GenerateFuzzQueryOption(provider); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + std::vector dataSet = { data }; + udmfServiceImpl->ProcessData(query, dataSet); +} + +void VerifyIntentionPermissionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr executor = std::make_shared(NUM_MAX, NUM_MIN); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), std::move(executor) }); + QueryOption query = GenerateFuzzQueryOption(provider); + UnifiedData data; + std::string intention = provider.ConsumeRandomLengthString(); + std::string bundleName = provider.ConsumeRandomLengthString(); + std::vector groupId(ID_LEN); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey(intention, bundleName, groupIdStr); + CheckerManager::CheckInfo info; + info.tokenId = provider.ConsumeIntegral(); + udmfServiceImpl->VerifyIntentionPermission(query, data, udKey, info); + Runtime runtime; + data.SetRuntime(runtime); + udmfServiceImpl->VerifyIntentionPermission(query, data, udKey, info); + udmfServiceImpl->OnBind( + { "UdmfServiceStubFuzz", static_cast(IPCSkeleton::GetSelfTokenID()), nullptr }); + executor = nullptr; +} + +void IsFileMangerIntentionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + auto intention = provider.ConsumeRandomLengthString(); + udmfServiceImpl->IsFileMangerIntention(intention); } } @@ -296,5 +607,22 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) OHOS::ObtainAsynProcessFuzz(provider); OHOS::ClearAsynProcessFuzz(provider); + OHOS::SetDelayInfoFuzz(provider); + OHOS::PushDelayDataFuzz(provider); + OHOS::GetDataIfAvailableFuzz(provider); + OHOS::OnGetAppShareOptionFuzz(provider); + OHOS::CheckDragParamsFuzz(provider); + OHOS::IsPermissionInCacheFuzz(provider); + OHOS::IsReadAndKeepFuzz(provider); + OHOS::ProcessUriFuzz(provider); + OHOS::ProcessCrossDeviceDataFuzz(provider); + OHOS::ResolveAutoLaunchFuzz(provider); + OHOS::HasDatahubPriviledgeFuzz(provider); + OHOS::OnUserChangeFuzz(provider); + OHOS::IsNeedTransferDeviceTypeFuzz(provider); + OHOS::CheckAddPrivilegePermissionFuzz(provider); + OHOS::ProcessDataFuzz(provider); + OHOS::VerifyIntentionPermissionFuzz(provider); + OHOS::IsFileMangerIntentionFuzz(provider); return 0; } \ No newline at end of file