From 5a4dc4b7b6b2c99f27ee9e9f75cb82e8c2212964 Mon Sep 17 00:00:00 2001 From: hunili Date: Tue, 26 Aug 2025 21:40:06 +0800 Subject: [PATCH] =?UTF-8?q?[Bug]:=20Fuzz=20=E6=95=B4=E6=94=B9=20https://gi?= =?UTF-8?q?tee.com/openharmony/filemanagement=5Fuser=5Ffile=5Fservice/issu?= =?UTF-8?q?es/ICUXN6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hunili --- .../externalfileaccess_fuzzer/BUILD.gn | 6 +- .../external_file_access_fuzzer.cpp | 35 +--- .../externalfileaccessaccess_fuzzer/BUILD.gn | 6 +- .../externalfileaccessaccess_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- .../externalfileaccesscreatefile_fuzzer.cpp | 30 +-- .../externalfileaccessdelete_fuzzer/BUILD.gn | 6 +- .../externalfileaccessdelete_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- ...cessgetfileinfofromrelativepath_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- ...nalfileaccessgetfileinfofromuri_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- .../externalfileaccessgetroots_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- .../externalfileaccesslistfile_fuzzer.cpp | 30 +-- .../externalfileaccessmkdir_fuzzer/BUILD.gn | 6 +- .../externalfileaccessmkdir_fuzzer.cpp | 30 +-- .../externalfileaccessmove_fuzzer/BUILD.gn | 6 +- .../externalfileaccessmove_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- .../externalfileaccessopenfile_fuzzer.cpp | 30 +-- .../externalfileaccessrename_fuzzer/BUILD.gn | 6 +- .../externalfileaccessrename_fuzzer.cpp | 30 +-- .../BUILD.gn | 6 +- .../externalfileaccessscanfile_fuzzer.cpp | 30 +-- .../fileaccessextbaseproxy_fuzzer/BUILD.gn | 6 +- .../fileaccessextbaseproxy_fuzzer.cpp | 31 +-- .../fileaccessextconnection_fuzzer/BUILD.gn | 6 +- .../BUILD.gn | 6 +- .../fileaccessservicebaseproxy_fuzzer.cpp | 32 +--- .../fileinfosharedmemory_fuzzer/BUILD.gn | 6 +- .../medialibraryfileaccess_fuzzer/BUILD.gn | 8 +- .../medialibrary_file_access_fuzzer.cpp | 33 +--- .../include/user_file_service_token_mock.h | 42 ++++ .../src/user_file_service_token_mock.cpp | 180 ++++++++++++++++++ .../useraccesscommonutils_fuzzer/BUILD.gn | 10 +- 37 files changed, 370 insertions(+), 463 deletions(-) create mode 100644 test/fuzztest/privacy_comm/include/user_file_service_token_mock.h create mode 100644 test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp diff --git a/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn index 96627b20..12012feb 100644 --- a/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn @@ -24,10 +24,14 @@ ohos_fuzztest("ExternalFileAccessFuzzTest") { include_dirs = [ "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", "${user_file_service_path}/utils", ] - sources = [ "external_file_access_fuzzer.cpp" ] + sources = [ + "external_file_access_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] configs = [ "//build/config/compiler:exceptions" ] deps = [ diff --git a/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp b/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp index fcc1bfc1..22c2c6f0 100644 --- a/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp +++ b/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -27,7 +27,7 @@ #include "file_info_shared_memory.h" #include "iservice_registry.h" #include "hilog_wrapper.h" - +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; using namespace OHOS; @@ -37,39 +37,11 @@ const int ABILITY_ID = 5003; shared_ptr g_fah = nullptr; const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; - -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "SetUpTestCase"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - shared_ptr GetFileAccessHelper() { if (g_fah != nullptr) { return g_fah; } - SetNativeToken(); auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (saManager == nullptr) { return nullptr; @@ -109,7 +81,6 @@ shared_ptr GetFileAccessHelper() bool CreatorFuzzTest(const uint8_t* data, size_t size) { - SetNativeToken(); if ((data == nullptr) || (size <= 0)) { HILOG_ERROR("parameter data is nullptr or parameter size <= 0."); return false; @@ -422,6 +393,8 @@ bool GetFileInfoFromUriFuzzTest(const uint8_t* data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); /* Run your code on data */ OHOS::CreatorFuzzTest(data, size); OHOS::AccessFuzzTest(data, size); diff --git a/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn index 366750a8..902cd86c 100644 --- a/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ ohos_fuzztest("ExternalFileAccessAccessFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -29,7 +30,10 @@ ohos_fuzztest("ExternalFileAccessAccessFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp" + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp b/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp index 987c5200..d9e7a811 100644 --- a/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessAccessFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessAccessFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_ACCESS uint32_t code = 14; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessAccessFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessAccessFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn index f4081b59..dd7618ca 100644 --- a/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessCreateFileFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessCreateFileFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp b/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp index 9fd9100a..816554de 100644 --- a/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessCreateFileFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessCreateFileFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_CREATEILE uint32_t code = 2; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessCreateFileFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessCreateFileFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn index b7716541..85fdfe48 100644 --- a/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ ohos_fuzztest("ExternalFileAccessDeleteFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -29,7 +30,10 @@ ohos_fuzztest("ExternalFileAccessDeleteFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp b/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp index 104f85d1..d87ea6fe 100644 --- a/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessDeleteFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessDeleteFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_DELETE uint32_t code = 4; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessDeleteFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessDeleteFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn index 705fdcab..e9722327 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessGetFileInfoFromRelativePathFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessGetFileInfoFromRelativePathFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp index eaf806c1..088f7095 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessGetFileInfoFromRelativePathFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessGetFileInfoFromRelativePathFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_GET_FILEINFO_FROM_RELATIVE_PATH uint32_t code = 17; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessGetFileInfoFromRelativePathFuzzTest(const uint8_t *data, /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessGetFileInfoFromRelativePathFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn index f5ecec9a..9df1afa9 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessGetFileInfoFromUriFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessGetFileInfoFromUriFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp index e9b05ce1..2b32ec31 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessGetFileInfoFromUriFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessGetFileInfoFromUriFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_GET_FILEINFO_FROM_URI uint32_t code = 16; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessGetFileInfoFromUriFuzzTest(const uint8_t *data, size_t si /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessGetFileInfoFromUriFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn index 57ee244d..24f43d92 100644 --- a/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessGetRootsFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessGetRootsFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp b/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp index 5f8713a0..e5847f47 100644 --- a/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessGetRootsFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileInterfaceFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); auto fileAccessExtAbility = FileAccessExtAbility::Create(nullptr); auto fileAccessExtAbilitySharePtr = std::shared_ptr(fileAccessExtAbility); sptr fileAccessExtStubObj(new (std::nothrow) FileAccessExtStubImpl( @@ -98,6 +72,8 @@ bool ExternalFileInterfaceFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileInterfaceFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn index b09c02ec..41c9c750 100644 --- a/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessListFileFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessListFileFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp b/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp index d109f35b..c7ba335d 100644 --- a/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessListFileFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessListFileFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_LISTFILE uint32_t code = 8; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessListFileFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessListFileFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn index 0b0a42fd..9341226a 100644 --- a/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ ohos_fuzztest("ExternalFileAccessMkdirFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -29,7 +30,10 @@ ohos_fuzztest("ExternalFileAccessMkdirFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp b/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp index fa4db344..c4c5ffd5 100644 --- a/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessMkdirFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessMkdirFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_MKDIR uint32_t code = 3; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessMkdirFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessMkdirFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn index e845a8ac..47d860a9 100644 --- a/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ ohos_fuzztest("ExternalFileAccessMoveFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -29,7 +30,10 @@ ohos_fuzztest("ExternalFileAccessMoveFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp b/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp index 5aaf05aa..d0000105 100644 --- a/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessMoveFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessMoveFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_MOVE uint32_t code = 5; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessMoveFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessMoveFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn index ba64c2d0..329bfdbf 100644 --- a/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessOpenFileFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessOpenFileFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp b/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp index 8f477cb5..a1eb5b61 100644 --- a/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessOpenFileFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessOpenFileFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_OPENFILE uint32_t code = 1; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessOpenFileFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessOpenFileFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn index 2eb208d1..7e053deb 100644 --- a/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ ohos_fuzztest("ExternalFileAccessRenameFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -29,7 +30,10 @@ ohos_fuzztest("ExternalFileAccessRenameFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp b/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp index e9a1126d..68039bd7 100644 --- a/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessRenameFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessRenameFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_RENAME uint32_t code = 7; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessRenameFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessRenameFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn index 2f1d93f4..0a1e818c 100644 --- a/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("ExternalFileAccessScanFileFuzzTest") { include_dirs = [ "${user_file_service_path}/utils", "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] cflags = [ "-g", @@ -28,7 +29,10 @@ ohos_fuzztest("ExternalFileAccessScanFileFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp b/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp index fdc5e56d..eaa79506 100644 --- a/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp @@ -31,6 +31,7 @@ #include "nativetoken_kit.h" #include "token_setproc.h" #include "accesstoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,35 +39,8 @@ using namespace OHOS; using namespace FileAccessFwk; using namespace AbilityRuntime; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "ExternalFileAccessScanFileFuzzTest"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - bool ExternalFileAccessScanFileFuzzTest(const uint8_t *data, size_t size) { - SetNativeToken(); // CMD_SCANFILE uint32_t code = 9; MessageParcel datas; @@ -96,6 +70,8 @@ bool ExternalFileAccessScanFileFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); OHOS::ExternalFileAccessScanFileFuzzTest(data, size); return 0; } diff --git a/test/fuzztest/fileaccessextbaseproxy_fuzzer/BUILD.gn b/test/fuzztest/fileaccessextbaseproxy_fuzzer/BUILD.gn index c7e264b2..efdebe29 100644 --- a/test/fuzztest/fileaccessextbaseproxy_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessextbaseproxy_fuzzer/BUILD.gn @@ -21,6 +21,7 @@ ohos_fuzztest("FileAccessExtBaseProxyFuzzTest") { "${user_file_service_path}/test/fuzztest/fileaccessextbaseproxy_fuzzer" include_dirs = [ "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", "${user_file_service_path}/utils", ] cflags = [ @@ -29,7 +30,10 @@ ohos_fuzztest("FileAccessExtBaseProxyFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "fileaccessextbaseproxy_fuzzer.cpp" ] + sources = [ + "fileaccessextbaseproxy_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp" + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/fileaccessextbaseproxy_fuzzer/fileaccessextbaseproxy_fuzzer.cpp b/test/fuzztest/fileaccessextbaseproxy_fuzzer/fileaccessextbaseproxy_fuzzer.cpp index fa52bac2..58e66d32 100644 --- a/test/fuzztest/fileaccessextbaseproxy_fuzzer/fileaccessextbaseproxy_fuzzer.cpp +++ b/test/fuzztest/fileaccessextbaseproxy_fuzzer/fileaccessextbaseproxy_fuzzer.cpp @@ -25,6 +25,8 @@ #include "token_setproc.h" #include "nativetoken_kit.h" +#include "user_file_service_token_mock.h" + namespace OHOS { using namespace std; using namespace FileAccessFwk; @@ -43,38 +45,11 @@ T TypeCast(const uint8_t *data, int *pos = nullptr) return *(reinterpret_cast(data)); } -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "SetUpTestCase"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - shared_ptr GetFileAccessHelper() { if (g_fah != nullptr) { return g_fah; } - SetNativeToken(); auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (saManager == nullptr) { return nullptr; @@ -371,6 +346,8 @@ bool UrieFuzzTest(const uint8_t *data, size_t size) /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); auto helper = OHOS::GetFileAccessHelper(); if (helper == nullptr) { printf("helper is nullptr."); diff --git a/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn b/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn index 73d98a82..0c029971 100644 --- a/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn @@ -23,7 +23,7 @@ ohos_fuzztest("FileAccessExtConnectionFuzzTest") { "${user_file_service_path}/interfaces/inner_api/file_access/include", "${user_file_service_path}/services/native/file_access_service/include", "${user_file_service_path}/interfaces/kits/js/src/common", - "${user_file_service_path}/utils", + "${user_file_service_path}/utils" ] cflags = [ "-g", @@ -31,7 +31,9 @@ ohos_fuzztest("FileAccessExtConnectionFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/fileaccessextconnection_fuzzer/fileaccessextconnection_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/fileaccessextconnection_fuzzer/fileaccessextconnection_fuzzer.cpp" + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/fileaccessservicebaseproxy_fuzzer/BUILD.gn b/test/fuzztest/fileaccessservicebaseproxy_fuzzer/BUILD.gn index a33c004a..6e146040 100644 --- a/test/fuzztest/fileaccessservicebaseproxy_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessservicebaseproxy_fuzzer/BUILD.gn @@ -25,9 +25,13 @@ ohos_fuzztest("FileAccessServiceBaseProxyFuzzTest") { include_dirs = [ "${user_file_service_path}/interfaces/inner_api/file_access/include", "${user_file_service_path}/utils", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] - sources = [ "fileaccessservicebaseproxy_fuzzer.cpp" ] + sources = [ + "fileaccessservicebaseproxy_fuzzer.cpp", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", diff --git a/test/fuzztest/fileaccessservicebaseproxy_fuzzer/fileaccessservicebaseproxy_fuzzer.cpp b/test/fuzztest/fileaccessservicebaseproxy_fuzzer/fileaccessservicebaseproxy_fuzzer.cpp index e00bfcdf..e0206759 100644 --- a/test/fuzztest/fileaccessservicebaseproxy_fuzzer/fileaccessservicebaseproxy_fuzzer.cpp +++ b/test/fuzztest/fileaccessservicebaseproxy_fuzzer/fileaccessservicebaseproxy_fuzzer.cpp @@ -26,6 +26,7 @@ #include "iservice_registry.h" #include "token_setproc.h" #include "nativetoken_kit.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -45,38 +46,11 @@ T TypeCast(const uint8_t *data, int *pos = nullptr) return *(reinterpret_cast(data)); } -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "SetUpTestCase"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - shared_ptr GetFileAccessHelper() { if (g_fah != nullptr) { return g_fah; } - SetNativeToken(); auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (saManager == nullptr) { return nullptr; @@ -120,7 +94,7 @@ public: virtual ~TestObserver() = default; int OnChange(const NotifyMessage ¬ifyMessage) override; }; - + int TestObserver::OnChange(const NotifyMessage ¬ifyMessage) { return 1; @@ -185,6 +159,8 @@ bool UnregisterNotifyNoObserverFuzzTest(sptr proxy, cons /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + OHOS::UserFileServiceTokenMock tokenMock; + tokenMock.SetFileManagerToken(); auto proxy = OHOS::FileAccessFwk::FileAccessServiceClient::GetInstance(); if (proxy == nullptr) { printf("service proxy is nullptr"); diff --git a/test/fuzztest/fileinfosharedmemory_fuzzer/BUILD.gn b/test/fuzztest/fileinfosharedmemory_fuzzer/BUILD.gn index 4dc50a83..19c5719e 100644 --- a/test/fuzztest/fileinfosharedmemory_fuzzer/BUILD.gn +++ b/test/fuzztest/fileinfosharedmemory_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -30,7 +30,9 @@ ohos_fuzztest("FileInfoSharedMemoryFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/fileinfosharedmemory_fuzzer/fileinfosharedmemory_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/fileinfosharedmemory_fuzzer/fileinfosharedmemory_fuzzer.cpp" + ] external_deps = [ "ability_base:want", diff --git a/test/fuzztest/medialibraryfileaccess_fuzzer/BUILD.gn b/test/fuzztest/medialibraryfileaccess_fuzzer/BUILD.gn index 9caf3d9b..17e4bc9e 100644 --- a/test/fuzztest/medialibraryfileaccess_fuzzer/BUILD.gn +++ b/test/fuzztest/medialibraryfileaccess_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -25,12 +25,16 @@ ohos_fuzztest("MedialibraryFileAccessFuzzTest") { include_dirs = [ "${user_file_service_path}/interfaces/inner_api/file_access/include", "${user_file_service_path}/utils", + "${user_file_service_path}/test/fuzztest/privacy_comm/include", ] sources = [ "medialibrary_file_access_fuzzer.cpp" ] configs = [ "//build/config/compiler:exceptions" ] - deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit" ] + deps = [ + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + "${user_file_service_path}/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp", + ] external_deps = [ "ability_base:want", diff --git a/test/fuzztest/medialibraryfileaccess_fuzzer/medialibrary_file_access_fuzzer.cpp b/test/fuzztest/medialibraryfileaccess_fuzzer/medialibrary_file_access_fuzzer.cpp index 76b3b4c6..a2f488c1 100644 --- a/test/fuzztest/medialibraryfileaccess_fuzzer/medialibrary_file_access_fuzzer.cpp +++ b/test/fuzztest/medialibraryfileaccess_fuzzer/medialibrary_file_access_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -27,6 +27,7 @@ #include "file_access_helper.h" #include "iservice_registry.h" #include "hilog_wrapper.h" +#include "user_file_service_token_mock.h" namespace OHOS { using namespace std; @@ -38,38 +39,11 @@ shared_ptr g_fah = nullptr; const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; -void SetNativeToken() -{ - uint64_t tokenId; - const char *perms[] = { - "ohos.permission.FILE_ACCESS_MANAGER", - "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" - }; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 3, - .aclsNum = 0, - .dcaps = nullptr, - .perms = perms, - .acls = nullptr, - .aplStr = "system_core", - }; - - infoInstance.processName = "SetUpTestCase"; - tokenId = GetAccessTokenId(&infoInstance); - const uint64_t systemAppMask = (static_cast(1) << 32); - tokenId |= systemAppMask; - SetSelfTokenID(tokenId); - OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); -} - shared_ptr GetFileAccessHelper() { if (g_fah != nullptr) { return g_fah; } - SetNativeToken(); auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (saManager == nullptr) { return nullptr; @@ -124,7 +98,6 @@ bool CheckDataAndGetDownloadUri(const uint8_t* data, size_t size, shared_ptr& reqPerm, bool isSystemApp); + ~UserFileServiceTokenMock(); + void SetFileManagerToken(); +private: + int32_t AllocTestHapToken(const HapInfoParams& hapInfo, HapPolicyParams& hapPolicy, AccessTokenIDEx &tokenIdEx); + uint64_t selfTokenId_; + uint32_t mockTokenId_; +}; +} // namespace FileAccessFwk +} // namespace OHOS +#endif // USER_FILE_SERVICE_TOKEN_MOCK_H diff --git a/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp b/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp new file mode 100644 index 00000000..88147538 --- /dev/null +++ b/test/fuzztest/privacy_comm/src/user_file_service_token_mock.cpp @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "user_file_service_token_mock.h" + +#include +#include +#include "hilog_wrapper.h" + +using namespace OHOS::Security::AccessToken; + +namespace OHOS { +namespace FileAccessFwk { +const std::string FILE_ACCESS_PERMISSION = "ohos.permission.FILE_ACCESS_MANAGER"; +const std::string GET_BUNDLE_INFO_PRIVILEGED = "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"; +const unsigned char FILES[] = {0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x75, 0x61, 0x77, 0x65, 0x69, + 0x2e, 0x68, 0x6d, 0x6f, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x65, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x00}; + +const unsigned char FILEMANAGER[] = {0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x75, 0x61, 0x77, 0x65, 0x69, + 0x2e, 0x68, 0x6d, 0x6f, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x00}; + +std::vector requiredPermissions = { FILE_ACCESS_PERMISSION, GET_BUNDLE_INFO_PRIVILEGED }; +// 获取Native进程tokenID +static AccessTokenID GetNativeTokenIdFromProcess(const std::string &process) +{ + std::string dumpInfo; + AtmToolsParamInfo info; + info.processName = process; + AccessTokenKit::DumpTokenInfo(info, dumpInfo); + size_t pos = dumpInfo.find("\"tokenID\": "); + if (pos == std::string::npos) { + HILOG_ERROR("GetNativeTokenIdFromProcess: dumpInfo is invalid."); + return 0; + } + pos += std::string("\"tokenID\": ").length(); + std::string numStr; + while (pos < dumpInfo.length() && std::isdigit(dumpInfo[pos])) { + numStr += dumpInfo[pos]; + ++pos; + } + std::istringstream iss(numStr); + AccessTokenID tokenID; + iss >> tokenID; + return tokenID; +} + +UserFileServiceTokenMock::UserFileServiceTokenMock() +{ + selfTokenId_ = GetSelfTokenID(); + HILOG_INFO("UserFileServiceTokenMock: selfTokenId_ = 0x%{public}" PRIx64 "", selfTokenId_); +} + +UserFileServiceTokenMock::~UserFileServiceTokenMock() +{ + if (SetSelfTokenID(selfTokenId_) != 0) { + HILOG_ERROR("~UserFileServiceTokenMock SetSelfTokenID: 0x%{public}" PRIx64 " failed", selfTokenId_); + } + HILOG_INFO("~UserFileServiceTokenMock, Current tokenId = 0x%{public}" PRIx64 "", GetSelfTokenID()); +} + +void UserFileServiceTokenMock::SetFileManagerToken() +{ + std::string filesBundle(reinterpret_cast(FILES)); + std::string fileManagerBundle(reinterpret_cast(FILEMANAGER)); + if (!SetHapToken(filesBundle, requiredPermissions, true)) { + HILOG_ERROR("GetFileAccessHelper seHapToken files failed."); + if (!SetHapToken(fileManagerBundle, requiredPermissions, true)) { + HILOG_ERROR("GetFileAccessHelper seHapToken filemanager failed."); + } + } +} + +void UserFileServiceTokenMock::SetSaToken(const std::string& process) +{ + SetSelfTokenID(selfTokenId_); + uint32_t tokenId = GetNativeTokenIdFromProcess(process); + HILOG_INFO("SetSaToken, tokenId = 0x%{public}x", tokenId); + if (SetSelfTokenID(tokenId) != 0) { + HILOG_ERROR("SetSaToken SetSelfTokenID failed"); + } + HILOG_INFO("SetSaToken Current tokenId = 0x%{public}" PRIx64 "", GetSelfTokenID()); +} + +int32_t UserFileServiceTokenMock::AllocTestHapToken( + const HapInfoParams &hapInfo, HapPolicyParams &hapPolicy, AccessTokenIDEx &tokenIdEx) +{ + uint64_t selfTokenId = GetSelfTokenID(); + int ret = RET_SUCCESS; + for (auto& permissionStateFull : hapPolicy.permStateList) { + PermissionDef permDefResult; + if (AccessTokenKit::GetDefPermission(permissionStateFull.permissionName, permDefResult) != RET_SUCCESS) { + continue; + } + if (permDefResult.availableLevel > hapPolicy.apl) { + hapPolicy.aclRequestedList.emplace_back(permissionStateFull.permissionName); + } + } + if (GetNativeTokenIdFromProcess("foundation") == selfTokenId) { + HILOG_INFO("GetNativeTokenIdFromProcess called"); + ret = AccessTokenKit::InitHapToken(hapInfo, hapPolicy, tokenIdEx); + } else { + HILOG_INFO("SetSaToken called"); + // set sh token for self + SetSaToken("foundation"); + ret = AccessTokenKit::InitHapToken(hapInfo, hapPolicy, tokenIdEx); + if (ret != 0) { + HILOG_ERROR("InitHapToken failed"); + } + // restore + if (SetSelfTokenID(selfTokenId) != 0) { + HILOG_ERROR("AllocTestHapToken SetSelfTokenID failed"); + } + } + return ret; +} + +bool UserFileServiceTokenMock::SetHapToken( + const std::string& bundle, const std::vector& reqPerm, bool isSystemApp) +{ + SetSelfTokenID(selfTokenId_); + HapInfoParams infoParams = { + .userID = 0, + .bundleName = bundle, + .instIndex = 0, + .appIDDesc = "AccessTokenTestAppID", + .apiVersion = DEFAULT_API_VERSION, + .isSystemApp = isSystemApp, + .appDistributionType = "", + }; + + HapPolicyParams policyParams = { + .apl = APL_NORMAL, + .domain = "accesstoken_test_domain", + }; + for (size_t i = 0; i < reqPerm.size(); ++i) { + PermissionDef permDefResult; + if (AccessTokenKit::GetDefPermission(reqPerm[i], permDefResult) != RET_SUCCESS) { + continue; + } + PermissionStateFull permState = { + .permissionName = reqPerm[i], + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} + }; + policyParams.permStateList.emplace_back(permState); + if (permDefResult.availableLevel > policyParams.apl) { + policyParams.aclRequestedList.emplace_back(reqPerm[i]); + } + } + + AccessTokenIDEx tokenIdEx = { 0 }; + AllocTestHapToken(infoParams, policyParams, tokenIdEx); + mockTokenId_ = tokenIdEx.tokenIdExStruct.tokenID; + if (mockTokenId_ == INVALID_TOKENID) { + HILOG_ERROR("SetHapToken AllocTestHapToken failed"); + return false; + } + if (SetSelfTokenID(tokenIdEx.tokenIDEx) != 0) { + HILOG_ERROR("SetHapToken SetSelfTokenID failed"); + return false; + } + return true; +} +} // namespace FileAccessFwk +} // namespace OHOS \ No newline at end of file diff --git a/test/fuzztest/useraccesscommonutils_fuzzer/BUILD.gn b/test/fuzztest/useraccesscommonutils_fuzzer/BUILD.gn index 9e7679bd..b8128094 100644 --- a/test/fuzztest/useraccesscommonutils_fuzzer/BUILD.gn +++ b/test/fuzztest/useraccesscommonutils_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -19,14 +19,18 @@ ohos_fuzztest("UserAccessCommonUtilsFuzzTest") { module_out_path = "user_file_service/user_file_service" fuzz_config_file = "${user_file_service_path}/test/fuzztest/useraccesscommonutils_fuzzer" - include_dirs = [ "${user_file_service_path}/utils" ] + include_dirs = [ + "${user_file_service_path}/utils" + ] cflags = [ "-g", "-O0", "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - sources = [ "${user_file_service_path}/test/fuzztest/useraccesscommonutils_fuzzer/useraccesscommonutils_fuzzer.cpp" ] + sources = [ + "${user_file_service_path}/test/fuzztest/useraccesscommonutils_fuzzer/useraccesscommonutils_fuzzer.cpp" + ] external_deps = [ "c_utils:utils", -- Gitee