diff --git a/test/fuzztest/loaddevice_fuzzer/BUILD.gn b/test/fuzztest/hdimanager/loaddevice_fuzzer/BUILD.gn similarity index 89% rename from test/fuzztest/loaddevice_fuzzer/BUILD.gn rename to test/fuzztest/hdimanager/loaddevice_fuzzer/BUILD.gn index ca547e7c..03f56108 100644 --- a/test/fuzztest/loaddevice_fuzzer/BUILD.gn +++ b/test/fuzztest/hdimanager/loaddevice_fuzzer/BUILD.gn @@ -11,10 +11,10 @@ module_output_path = "hdf/hdi" ohos_fuzztest("LoadDeviceFuzzTest") { module_out_path = module_output_path - fuzz_config_file = "//drivers/framework/test/fuzztest/loaddevice_fuzzer" + fuzz_config_file = "//drivers/framework/test/fuzztest/hdimanager/loaddevice_fuzzer" include_dirs = [ - "//drivers/framework/test/fuzztest/loaddevice_fuzzer", + "//drivers/framework/test/fuzztest/hdimanager/loaddevice_fuzzer", "//drivers/adapter/uhdf2/include/hdi", "//drivers/adapter/uhdf2/osal/include", "//drivers/framework/include/utils", diff --git a/test/fuzztest/loaddevice_fuzzer/corpus/init b/test/fuzztest/hdimanager/loaddevice_fuzzer/corpus/init similarity index 100% rename from test/fuzztest/loaddevice_fuzzer/corpus/init rename to test/fuzztest/hdimanager/loaddevice_fuzzer/corpus/init diff --git a/test/fuzztest/loaddevice_fuzzer/loaddevice_fuzzer.cpp b/test/fuzztest/hdimanager/loaddevice_fuzzer/loaddevice_fuzzer.cpp similarity index 78% rename from test/fuzztest/loaddevice_fuzzer/loaddevice_fuzzer.cpp rename to test/fuzztest/hdimanager/loaddevice_fuzzer/loaddevice_fuzzer.cpp index 8d90c7be..e9882338 100644 --- a/test/fuzztest/loaddevice_fuzzer/loaddevice_fuzzer.cpp +++ b/test/fuzztest/hdimanager/loaddevice_fuzzer/loaddevice_fuzzer.cpp @@ -9,17 +9,19 @@ #include "loaddevice_fuzzer.h" #include #include +#include #include "idevmgr_hdi.h" using namespace OHOS::HDI::DeviceManager::V1_0; namespace OHOS { +sptr g_devicemanager = IDeviceManager::Get(); + bool LoadDeviceFuzzTest(const uint8_t *data, size_t size) { bool result = false; std::string serviceName((const char *)data); - sptr devicemanager = IDeviceManager::Get(); - if (!devicemanager->LoadDevice(serviceName)) { + if (g_devicemanager != nullptr && g_devicemanager->LoadDevice(serviceName) == HDF_SUCCESS) { result = true; } return result; @@ -29,5 +31,5 @@ bool LoadDeviceFuzzTest(const uint8_t *data, size_t size) extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { OHOS::LoadDeviceFuzzTest(data, size); - return 0; + return HDF_SUCCESS; } diff --git a/test/fuzztest/loaddevice_fuzzer/loaddevice_fuzzer.h b/test/fuzztest/hdimanager/loaddevice_fuzzer/loaddevice_fuzzer.h similarity index 100% rename from test/fuzztest/loaddevice_fuzzer/loaddevice_fuzzer.h rename to test/fuzztest/hdimanager/loaddevice_fuzzer/loaddevice_fuzzer.h diff --git a/test/fuzztest/unloaddevice_fuzzer/project.xml b/test/fuzztest/hdimanager/loaddevice_fuzzer/project.xml similarity index 86% rename from test/fuzztest/unloaddevice_fuzzer/project.xml rename to test/fuzztest/hdimanager/loaddevice_fuzzer/project.xml index 97509d07..49eb561c 100644 --- a/test/fuzztest/unloaddevice_fuzzer/project.xml +++ b/test/fuzztest/hdimanager/loaddevice_fuzzer/project.xml @@ -10,8 +10,8 @@ 1000 - 300 + 120 - 4096 + 2048 diff --git a/test/fuzztest/registerservicestatuslistener_fuzzer/BUILD.gn b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/BUILD.gn similarity index 88% rename from test/fuzztest/registerservicestatuslistener_fuzzer/BUILD.gn rename to test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/BUILD.gn index c79602f0..45c4583a 100644 --- a/test/fuzztest/registerservicestatuslistener_fuzzer/BUILD.gn +++ b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/BUILD.gn @@ -12,10 +12,10 @@ ohos_fuzztest("RegisterServiceStatusListenerFuzzTest") { module_out_path = module_output_path fuzz_config_file = - "//drivers/framework/test/fuzztest/registerservicestatuslistener_fuzzer" + "//drivers/framework/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer" include_dirs = [ - "//drivers/framework/test/fuzztest/registerservicestatuslistener_fuzzer", + "//drivers/framework/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer", "//drivers/adapter/uhdf2/include/hdi", "//drivers/adapter/uhdf2/osal/include", "//drivers/framework/include/utils", diff --git a/test/fuzztest/registerservicestatuslistener_fuzzer/corpus/init b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/corpus/init similarity index 100% rename from test/fuzztest/registerservicestatuslistener_fuzzer/corpus/init rename to test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/corpus/init diff --git a/test/fuzztest/loaddevice_fuzzer/project.xml b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/project.xml similarity index 86% rename from test/fuzztest/loaddevice_fuzzer/project.xml rename to test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/project.xml index 97509d07..49eb561c 100644 --- a/test/fuzztest/loaddevice_fuzzer/project.xml +++ b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/project.xml @@ -10,8 +10,8 @@ 1000 - 300 + 120 - 4096 + 2048 diff --git a/test/fuzztest/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.cpp b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.cpp similarity index 71% rename from test/fuzztest/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.cpp rename to test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.cpp index 78248c90..9a1b2c55 100644 --- a/test/fuzztest/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.cpp +++ b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.cpp @@ -9,6 +9,7 @@ #include "registerservicestatuslistener_fuzzer.h" #include #include +#include #include #include #include @@ -31,14 +32,19 @@ void RegisterServStatListenerFuzzer::OnReceive(const ServiceStatus &status) } // namespace OHOS namespace OHOS { +sptr g_servmanager = IServiceManager::Get(); +sptr g_servstatlistener = new RegisterServStatListenerFuzzer(); + bool RegisterServiceStatusListenerFuzzTest(const uint8_t *data, size_t size) { bool result = false; - sptr servmanager = IServiceManager::Get(); - sptr servstatlistener = new RegisterServStatListenerFuzzer(); - if (!servmanager->RegisterServiceStatusListener(servstatlistener, reinterpret_cast(data))) { + if (g_servmanager != nullptr && + g_servmanager->RegisterServiceStatusListener( + g_servstatlistener, reinterpret_cast(data)) == HDF_SUCCESS) { + g_servmanager->UnregisterServiceStatusListener(g_servstatlistener); result = true; } + return result; } } // namespace OHOS @@ -46,5 +52,5 @@ bool RegisterServiceStatusListenerFuzzTest(const uint8_t *data, size_t size) extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { OHOS::RegisterServiceStatusListenerFuzzTest(data, size); - return 0; + return HDF_SUCCESS; } diff --git a/test/fuzztest/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.h b/test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.h similarity index 100% rename from test/fuzztest/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.h rename to test/fuzztest/hdimanager/registerservicestatuslistener_fuzzer/registerservicestatuslistener_fuzzer.h diff --git a/test/fuzztest/unloaddevice_fuzzer/BUILD.gn b/test/fuzztest/hdimanager/unloaddevice_fuzzer/BUILD.gn similarity index 89% rename from test/fuzztest/unloaddevice_fuzzer/BUILD.gn rename to test/fuzztest/hdimanager/unloaddevice_fuzzer/BUILD.gn index 5431c4be..241c4231 100644 --- a/test/fuzztest/unloaddevice_fuzzer/BUILD.gn +++ b/test/fuzztest/hdimanager/unloaddevice_fuzzer/BUILD.gn @@ -11,10 +11,10 @@ module_output_path = "hdf/hdi" ohos_fuzztest("UnloadDeviceFuzzTest") { module_out_path = module_output_path - fuzz_config_file = "//drivers/framework/test/fuzztest/unloaddevice_fuzzer" + fuzz_config_file = "//drivers/framework/test/fuzztest/hdimanager/unloaddevice_fuzzer" include_dirs = [ - "//drivers/framework/test/fuzztest/unloaddevice_fuzzer", + "//drivers/framework/test/fuzztest/hdimanager/unloaddevice_fuzzer", "//drivers/adapter/uhdf2/include/hdi", "//drivers/adapter/uhdf2/osal/include", "//drivers/framework/include/utils", diff --git a/test/fuzztest/unloaddevice_fuzzer/corpus/init b/test/fuzztest/hdimanager/unloaddevice_fuzzer/corpus/init similarity index 100% rename from test/fuzztest/unloaddevice_fuzzer/corpus/init rename to test/fuzztest/hdimanager/unloaddevice_fuzzer/corpus/init diff --git a/test/fuzztest/registerservicestatuslistener_fuzzer/project.xml b/test/fuzztest/hdimanager/unloaddevice_fuzzer/project.xml similarity index 86% rename from test/fuzztest/registerservicestatuslistener_fuzzer/project.xml rename to test/fuzztest/hdimanager/unloaddevice_fuzzer/project.xml index 97509d07..49eb561c 100644 --- a/test/fuzztest/registerservicestatuslistener_fuzzer/project.xml +++ b/test/fuzztest/hdimanager/unloaddevice_fuzzer/project.xml @@ -10,8 +10,8 @@ 1000 - 300 + 120 - 4096 + 2048 diff --git a/test/fuzztest/unloaddevice_fuzzer/unloaddevice_fuzzer.cpp b/test/fuzztest/hdimanager/unloaddevice_fuzzer/unloaddevice_fuzzer.cpp similarity index 71% rename from test/fuzztest/unloaddevice_fuzzer/unloaddevice_fuzzer.cpp rename to test/fuzztest/hdimanager/unloaddevice_fuzzer/unloaddevice_fuzzer.cpp index a134f822..6ba14c3a 100644 --- a/test/fuzztest/unloaddevice_fuzzer/unloaddevice_fuzzer.cpp +++ b/test/fuzztest/hdimanager/unloaddevice_fuzzer/unloaddevice_fuzzer.cpp @@ -9,6 +9,8 @@ #include "unloaddevice_fuzzer.h" #include #include +#include +#include #include "idevmgr_hdi.h" using namespace OHOS::HDI::DeviceManager::V1_0; @@ -16,16 +18,17 @@ using namespace OHOS::HDI::DeviceManager::V1_0; static constexpr const char *TEST_SERVICE_NAME = "sample_driver_service"; namespace OHOS { +sptr g_devicemanager = IDeviceManager::Get(); + bool UnloadDeviceFuzzTest(const uint8_t *data, size_t size) { bool result = false; std::string serviceName((const char *)data); - sptr devicemanager = IDeviceManager::Get(); - if (!devicemanager->LoadDevice(TEST_SERVICE_NAME)) { + if (g_devicemanager != nullptr && g_devicemanager->LoadDevice(TEST_SERVICE_NAME) == HDF_SUCCESS) { result = true; } - if (!devicemanager->UnloadDevice(serviceName)) { + if (g_devicemanager != nullptr && g_devicemanager->UnloadDevice(serviceName) == HDF_SUCCESS) { result = true; } return result; @@ -35,5 +38,5 @@ bool UnloadDeviceFuzzTest(const uint8_t *data, size_t size) extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { OHOS::UnloadDeviceFuzzTest(data, size); - return 0; + return HDF_SUCCESS; } diff --git a/test/fuzztest/unloaddevice_fuzzer/unloaddevice_fuzzer.h b/test/fuzztest/hdimanager/unloaddevice_fuzzer/unloaddevice_fuzzer.h similarity index 100% rename from test/fuzztest/unloaddevice_fuzzer/unloaddevice_fuzzer.h rename to test/fuzztest/hdimanager/unloaddevice_fuzzer/unloaddevice_fuzzer.h diff --git a/test/fuzztest/ioservice/ioservicebind_fuzzer/BUILD.gn b/test/fuzztest/ioservice/ioservicebind_fuzzer/BUILD.gn new file mode 100644 index 00000000..6b64aadb --- /dev/null +++ b/test/fuzztest/ioservice/ioservicebind_fuzzer/BUILD.gn @@ -0,0 +1,33 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +import("//build/config/features.gni") +import("//build/test.gni") +module_output_path = "hdf/ioservice" + +ohos_fuzztest("IoserviceBindFuzzTest") { + module_out_path = module_output_path + + fuzz_config_file = + "//drivers/framework/test/fuzztest/ioservice/ioservicebind_fuzzer" + + include_dirs = + [ "//drivers/framework/test/fuzztest/ioservice/ioservicebind_fuzzer.h" ] + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + ] + sources = [ "ioservicebind_fuzzer.cpp" ] + external_deps = [ "device_driver_framework:libhdf_utils" ] +} + +group("fuzztest") { + testonly = true + deps = [] + deps += [ ":IoserviceBindFuzzTest" ] +} diff --git a/test/fuzztest/ioservice/ioservicebind_fuzzer/corpus/init b/test/fuzztest/ioservice/ioservicebind_fuzzer/corpus/init new file mode 100644 index 00000000..3fc21a6e --- /dev/null +++ b/test/fuzztest/ioservice/ioservicebind_fuzzer/corpus/init @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +FUZZ \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicebind_fuzzer/ioservicebind_fuzzer.cpp b/test/fuzztest/ioservice/ioservicebind_fuzzer/ioservicebind_fuzzer.cpp new file mode 100644 index 00000000..7e989a00 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicebind_fuzzer/ioservicebind_fuzzer.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#include "ioservicebind_fuzzer.h" +#include +#include +#include "hdf_base.h" +#include "hdf_io_service.h" + +namespace OHOS { +bool IoserviceBindFuzzTest(const uint8_t *data, size_t size) +{ + bool result = false; + struct HdfIoService *testServ = HdfIoServiceBind((const char *)data); + if (testServ != nullptr) { + result = true; + } + HdfIoServiceRecycle(testServ); + return result; +} +} // namespace OHOS + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + OHOS::IoserviceBindFuzzTest(data, size); + return HDF_SUCCESS; +} diff --git a/test/fuzztest/ioservice/ioservicebind_fuzzer/ioservicebind_fuzzer.h b/test/fuzztest/ioservice/ioservicebind_fuzzer/ioservicebind_fuzzer.h new file mode 100644 index 00000000..591d13e9 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicebind_fuzzer/ioservicebind_fuzzer.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#ifndef IOSERVICE_BIND_FUZZER_H +#define IOSERVICE_BIND_FUZZER_H + +#define FUZZ_PROJECT_NAME "ioservicebind_fuzzer" + +#endif \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicebind_fuzzer/project.xml b/test/fuzztest/ioservice/ioservicebind_fuzzer/project.xml new file mode 100644 index 00000000..49eb561c --- /dev/null +++ b/test/fuzztest/ioservice/ioservicebind_fuzzer/project.xml @@ -0,0 +1,17 @@ + + + + + + 1000 + + 120 + + 2048 + + diff --git a/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/BUILD.gn b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/BUILD.gn new file mode 100644 index 00000000..ae3627da --- /dev/null +++ b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/BUILD.gn @@ -0,0 +1,42 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +import("//build/config/features.gni") +import("//build/test.gni") +module_output_path = "hdf/ioservice" + +ohos_fuzztest("IoserviceGroupListenFuzzTest") { + module_out_path = module_output_path + + fuzz_config_file = + "//drivers/framework/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer" + + include_dirs = [ + "//drivers/framework/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer.h", + ] + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + ] + if (is_standard_system) { + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "utils_base:utils", + ] + } else { + external_deps = [ "hilog:libhilog" ] + } + sources = [ "ioservicegrouplisten_fuzzer.cpp" ] + external_deps += [ "device_driver_framework:libhdf_utils" ] +} + +group("fuzztest") { + testonly = true + deps = [] + deps += [ ":IoserviceGroupListenFuzzTest" ] +} diff --git a/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/corpus/init b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/corpus/init new file mode 100644 index 00000000..3fc21a6e --- /dev/null +++ b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/corpus/init @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +FUZZ \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/ioservicegrouplisten_fuzzer.cpp b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/ioservicegrouplisten_fuzzer.cpp new file mode 100644 index 00000000..878709b7 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/ioservicegrouplisten_fuzzer.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#include "ioservicegrouplisten_fuzzer.h" +#include +#include +#include +#include "hdf_base.h" +#include "hdf_log.h" +#include "hdf_io_service.h" +#include "osal_time.h" + +namespace OHOS { +struct Eventlistener { + struct HdfDevEventlistener listener; + int32_t eventCount; +}; +static int OnDevEventReceived( + struct HdfDevEventlistener *listener, struct HdfIoService *service, uint32_t id, struct HdfSBuf *data); +static int eventCount = 0; + +static struct Eventlistener listener0 = { + .listener.onReceive = OnDevEventReceived, + .listener.priv = (void *)"listener0", + .eventCount = 0, +}; + +static int OnDevEventReceived( + struct HdfDevEventlistener *listener, struct HdfIoService *service, uint32_t id, struct HdfSBuf *data) +{ + OsalTimespec time; + OsalGetTime(&time); + HDF_LOGI("%{public}s: received event[%{public}d] from %{public}s at %" PRIu64 ".%" PRIu64 "", + (char *)listener->priv, eventCount++, (char *)service->priv, time.sec, time.usec); + + const char *string = HdfSbufReadString(data); + if (string == nullptr) { + HDF_LOGE("failed to read string in event data"); + return HDF_SUCCESS; + } + struct Eventlistener *listenercount = CONTAINER_OF(listener, struct Eventlistener, listener); + listenercount->eventCount++; + HDF_LOGI("%{public}s: dev event received: %{public}u %{public}s", (char *)service->priv, id, string); + return HDF_SUCCESS; +} + +bool IoserviceGroupListenFuzzTest(const uint8_t *data, size_t size) +{ + bool result = false; + struct HdfIoService *serv = HdfIoServiceBind((const char *)data); + if (serv == nullptr) { + return false; + } + struct HdfIoServiceGroup *group = HdfIoServiceGroupObtain(); + if (group == nullptr) { + HdfIoServiceRecycle(serv); + return false; + } + int ret = HdfIoServiceGroupAddService(group, serv); + if (ret != HDF_SUCCESS) { + HdfIoServiceGroupRecycle(group); + HdfIoServiceRecycle(serv); + return false; + } + if (HdfIoServiceGroupRegisterListener(group, &listener0.listener) == HDF_SUCCESS) { + ret = HdfIoServiceGroupUnregisterListener(group, &listener0.listener); + if (ret != HDF_SUCCESS) { + HdfIoServiceGroupRecycle(group); + HdfIoServiceRecycle(serv); + return false; + } + result = true; + } + HdfIoServiceGroupRecycle(group); + HdfIoServiceRecycle(serv); + return result; +} +} // namespace OHOS + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + OHOS::IoserviceGroupListenFuzzTest(data, size); + return HDF_SUCCESS; +} diff --git a/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/ioservicegrouplisten_fuzzer.h b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/ioservicegrouplisten_fuzzer.h new file mode 100644 index 00000000..56b04799 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/ioservicegrouplisten_fuzzer.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#ifndef IOSERVICE_GROUP_LISTEN_FUZZER_H +#define IOSERVICE_GROUP_LISTEN_FUZZER_H + +#define FUZZ_PROJECT_NAME "ioservicegrouplisten_fuzzer" + +#endif \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/project.xml b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/project.xml new file mode 100644 index 00000000..49eb561c --- /dev/null +++ b/test/fuzztest/ioservice/ioservicegrouplisten_fuzzer/project.xml @@ -0,0 +1,17 @@ + + + + + + 1000 + + 120 + + 2048 + + diff --git a/test/fuzztest/ioservice/ioservicelisten_fuzzer/BUILD.gn b/test/fuzztest/ioservice/ioservicelisten_fuzzer/BUILD.gn new file mode 100644 index 00000000..23d49b3e --- /dev/null +++ b/test/fuzztest/ioservice/ioservicelisten_fuzzer/BUILD.gn @@ -0,0 +1,41 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +import("//build/config/features.gni") +import("//build/test.gni") +module_output_path = "hdf/ioservice" + +ohos_fuzztest("IoserviceListenFuzzTest") { + module_out_path = module_output_path + + fuzz_config_file = + "//drivers/framework/test/fuzztest/ioservice/ioservicelisten_fuzzer" + + include_dirs = + [ "//drivers/framework/test/fuzztest/ioservice/ioservicelisten_fuzzer.h" ] + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + ] + if (is_standard_system) { + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "utils_base:utils", + ] + } else { + external_deps = [ "hilog:libhilog" ] + } + sources = [ "ioservicelisten_fuzzer.cpp" ] + external_deps += [ "device_driver_framework:libhdf_utils" ] +} + +group("fuzztest") { + testonly = true + deps = [] + deps += [ ":IoserviceListenFuzzTest" ] +} diff --git a/test/fuzztest/ioservice/ioservicelisten_fuzzer/corpus/init b/test/fuzztest/ioservice/ioservicelisten_fuzzer/corpus/init new file mode 100644 index 00000000..3fc21a6e --- /dev/null +++ b/test/fuzztest/ioservice/ioservicelisten_fuzzer/corpus/init @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +FUZZ \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicelisten_fuzzer/ioservicelisten_fuzzer.cpp b/test/fuzztest/ioservice/ioservicelisten_fuzzer/ioservicelisten_fuzzer.cpp new file mode 100644 index 00000000..fffa6dc4 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicelisten_fuzzer/ioservicelisten_fuzzer.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#include "ioservicelisten_fuzzer.h" +#include +#include +#include +#include "hdf_base.h" +#include "hdf_log.h" +#include "hdf_io_service.h" +#include "osal_time.h" + +namespace OHOS { +struct Eventlistener { + struct HdfDevEventlistener listener; + int32_t eventCount; +}; +static int OnDevEventReceived( + struct HdfDevEventlistener *listener, struct HdfIoService *service, uint32_t id, struct HdfSBuf *data); +static int eventCount = 0; + +static struct Eventlistener listener0 = { + .listener.onReceive = OnDevEventReceived, + .listener.priv = (void *)"listener0", + .eventCount = 0, +}; + +static int OnDevEventReceived( + struct HdfDevEventlistener *listener, struct HdfIoService *service, uint32_t id, struct HdfSBuf *data) +{ + OsalTimespec time; + OsalGetTime(&time); + HDF_LOGI("%{public}s: received event[%{public}d] from %{public}s at %" PRIu64 ".%" PRIu64 "", + (char *)listener->priv, eventCount++, (char *)service->priv, time.sec, time.usec); + + const char *string = HdfSbufReadString(data); + if (string == nullptr) { + HDF_LOGE("failed to read string in event data"); + return HDF_SUCCESS; + } + struct Eventlistener *listenercount = CONTAINER_OF(listener, struct Eventlistener, listener); + listenercount->eventCount++; + HDF_LOGI("%{public}s: dev event received: %{public}u %{public}s", (char *)service->priv, id, string); + return HDF_SUCCESS; +} + +bool IoserviceListenFuzzTest(const uint8_t *data, size_t size) +{ + bool result = false; + struct HdfIoService *serv = HdfIoServiceBind((const char *)data); + if (serv == nullptr) { + return false; + } + if (HdfDeviceRegisterEventListener(serv, &listener0.listener) == HDF_SUCCESS) { + int ret = HdfDeviceUnregisterEventListener(serv, &listener0.listener); + if (ret != HDF_SUCCESS) { + HdfIoServiceRecycle(serv); + return false; + } + result = true; + } + HdfIoServiceRecycle(serv); + return result; +} +} // namespace OHOS + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + OHOS::IoserviceListenFuzzTest(data, size); + return HDF_SUCCESS; +} diff --git a/test/fuzztest/ioservice/ioservicelisten_fuzzer/ioservicelisten_fuzzer.h b/test/fuzztest/ioservice/ioservicelisten_fuzzer/ioservicelisten_fuzzer.h new file mode 100644 index 00000000..ab845686 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicelisten_fuzzer/ioservicelisten_fuzzer.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#ifndef IOSERVICE_LISTEN_FUZZER_H +#define IOSERVICE_LISTEN_FUZZER_H + +#define FUZZ_PROJECT_NAME "ioservicelisten_fuzzer" + +#endif \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicelisten_fuzzer/project.xml b/test/fuzztest/ioservice/ioservicelisten_fuzzer/project.xml new file mode 100644 index 00000000..49eb561c --- /dev/null +++ b/test/fuzztest/ioservice/ioservicelisten_fuzzer/project.xml @@ -0,0 +1,17 @@ + + + + + + 1000 + + 120 + + 2048 + + diff --git a/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/BUILD.gn b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/BUILD.gn new file mode 100644 index 00000000..b6d660a4 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/BUILD.gn @@ -0,0 +1,39 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +import("//build/config/features.gni") +import("//build/test.gni") +module_output_path = "hdf/ioservice" + +ohos_fuzztest("IoserviceNameGetByDeviceClassFuzzTest") { + module_out_path = module_output_path + + fuzz_config_file = "//drivers/framework/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer" + + include_dirs = [ "//drivers/framework/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer.h" ] + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + ] + if (is_standard_system) { + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "utils_base:utils", + ] + } else { + external_deps = [ "hilog:libhilog" ] + } + sources = [ "ioservicenamegetbydeviceclass_fuzzer.cpp" ] + external_deps += [ "device_driver_framework:libhdf_utils" ] +} + +group("fuzztest") { + testonly = true + deps = [] + deps += [ ":IoserviceNameGetByDeviceClassFuzzTest" ] +} diff --git a/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/corpus/init b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/corpus/init new file mode 100644 index 00000000..3fc21a6e --- /dev/null +++ b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/corpus/init @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +FUZZ \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/ioservicenamegetbydeviceclass_fuzzer.cpp b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/ioservicenamegetbydeviceclass_fuzzer.cpp new file mode 100644 index 00000000..f113b24a --- /dev/null +++ b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/ioservicenamegetbydeviceclass_fuzzer.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#include "ioservicenamegetbydeviceclass_fuzzer.h" +#include +#include +#include +#include "hdf_base.h" +#include "hdf_io_service_if.h" + +namespace OHOS { +bool IoserviceNameGetByDeviceClassFuzzTest(const uint8_t *data, size_t size) +{ + bool result = false; + struct HdfSBuf *reply = HdfSbufObtainDefaultSize(); + int32_t ret = HdfGetServiceNameByDeviceClass(static_cast(*data), reply); + if (ret == HDF_SUCCESS) { + result = true; + } + HdfSbufRecycle(reply); + return result; +} +} // namespace OHOS + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + OHOS::IoserviceNameGetByDeviceClassFuzzTest(data, size); + return HDF_SUCCESS; +} diff --git a/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/ioservicenamegetbydeviceclass_fuzzer.h b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/ioservicenamegetbydeviceclass_fuzzer.h new file mode 100644 index 00000000..fa575bb0 --- /dev/null +++ b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/ioservicenamegetbydeviceclass_fuzzer.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#ifndef IOSERVICE_NAME_GET_BY_DEVICE_CLASS_FUZZER_H +#define IOSERVICE_NAME_GET_BY_DEVICE_CLASS_FUZZER_H + +#define FUZZ_PROJECT_NAME "ioservicenamegetbydeviceclass_fuzzer" + +#endif \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/project.xml b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/project.xml new file mode 100644 index 00000000..49eb561c --- /dev/null +++ b/test/fuzztest/ioservice/ioservicenamegetbydeviceclass_fuzzer/project.xml @@ -0,0 +1,17 @@ + + + + + + 1000 + + 120 + + 2048 + + diff --git a/test/fuzztest/ioservice/ioserviceremove_fuzzer/BUILD.gn b/test/fuzztest/ioservice/ioserviceremove_fuzzer/BUILD.gn new file mode 100644 index 00000000..89c46ab0 --- /dev/null +++ b/test/fuzztest/ioservice/ioserviceremove_fuzzer/BUILD.gn @@ -0,0 +1,41 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +import("//build/config/features.gni") +import("//build/test.gni") +module_output_path = "hdf/ioservice" + +ohos_fuzztest("IoserviceGroupRemoveServiceFuzzTest") { + module_out_path = module_output_path + + fuzz_config_file = + "//drivers/framework/test/fuzztest/ioservice/ioserviceremove_fuzzer" + + include_dirs = + [ "//drivers/framework/test/fuzztest/ioservice/ioserviceremove_fuzzer.h" ] + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + ] + if (is_standard_system) { + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "utils_base:utils", + ] + } else { + external_deps = [ "hilog:libhilog" ] + } + sources = [ "ioserviceremove_fuzzer.cpp" ] + external_deps += [ "device_driver_framework:libhdf_utils" ] +} + +group("fuzztest") { + testonly = true + deps = [] + deps += [ ":IoserviceGroupRemoveServiceFuzzTest" ] +} diff --git a/test/fuzztest/ioservice/ioserviceremove_fuzzer/corpus/init b/test/fuzztest/ioservice/ioserviceremove_fuzzer/corpus/init new file mode 100644 index 00000000..3fc21a6e --- /dev/null +++ b/test/fuzztest/ioservice/ioserviceremove_fuzzer/corpus/init @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +FUZZ \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioserviceremove_fuzzer/ioserviceremove_fuzzer.cpp b/test/fuzztest/ioservice/ioserviceremove_fuzzer/ioserviceremove_fuzzer.cpp new file mode 100644 index 00000000..3c898e95 --- /dev/null +++ b/test/fuzztest/ioservice/ioserviceremove_fuzzer/ioserviceremove_fuzzer.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#include "ioserviceremove_fuzzer.h" +#include +#include +#include "hdf_base.h" +#include "hdf_io_service.h" + +namespace OHOS { +bool IoserviceGroupRemoveServiceFuzzTest(const uint8_t *data, size_t size) +{ + bool result = false; + struct HdfIoService *serv = HdfIoServiceBind((const char *)data); + if (serv == nullptr) { + return false; + } + struct HdfIoServiceGroup *group = HdfIoServiceGroupObtain(); + if (group == nullptr) { + HdfIoServiceRecycle(serv); + return false; + } + int ret = HdfIoServiceGroupAddService(group, serv); + if (ret != HDF_SUCCESS) { + HdfIoServiceGroupRecycle(group); + HdfIoServiceRecycle(serv); + return false; + } + HdfIoServiceGroupRemoveService(group, serv); + if (group == nullptr) { + result = true; + } + HdfIoServiceGroupRecycle(group); + HdfIoServiceRecycle(serv); + return result; +} +} // namespace OHOS + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +{ + OHOS::IoserviceGroupRemoveServiceFuzzTest(data, size); + return HDF_SUCCESS; +} + diff --git a/test/fuzztest/ioservice/ioserviceremove_fuzzer/ioserviceremove_fuzzer.h b/test/fuzztest/ioservice/ioserviceremove_fuzzer/ioserviceremove_fuzzer.h new file mode 100644 index 00000000..d21a1fd6 --- /dev/null +++ b/test/fuzztest/ioservice/ioserviceremove_fuzzer/ioserviceremove_fuzzer.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#ifndef IOSERVICE_REMOVE_FUZZER_H +#define IOSERVICE_REMOVE_FUZZER_H + +#define FUZZ_PROJECT_NAME "ioserviceremove_fuzzer" + +#endif \ No newline at end of file diff --git a/test/fuzztest/ioservice/ioserviceremove_fuzzer/project.xml b/test/fuzztest/ioservice/ioserviceremove_fuzzer/project.xml new file mode 100644 index 00000000..49eb561c --- /dev/null +++ b/test/fuzztest/ioservice/ioserviceremove_fuzzer/project.xml @@ -0,0 +1,17 @@ + + + + + + 1000 + + 120 + + 2048 + +