From 34b47964d5165e071b26a8f6107d030f7ab7450c Mon Sep 17 00:00:00 2001 From: hamzeh Date: Tue, 10 May 2022 12:10:06 -0700 Subject: [PATCH] Add an AIDL fuzzer for health service Bug: 228862320 Test: SANITIZE_TARGET=hwaddress make android.hardware.health-service.aidl_fuzzer Change-Id: I917441738a7a9d18d7c4fcbe0212bdaf77fe265e --- health/aidl/default/Android.bp | 67 ++++++++++++++++++++++++++++++++++ health/aidl/default/fuzzer.cpp | 36 ++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 health/aidl/default/fuzzer.cpp diff --git a/health/aidl/default/Android.bp b/health/aidl/default/Android.bp index 8eab99773b..0d426dada4 100644 --- a/health/aidl/default/Android.bp +++ b/health/aidl/default/Android.bp @@ -159,3 +159,70 @@ cc_binary { init_rc: ["android.hardware.health-service.example_recovery.rc"], overrides: ["charger.recovery"], } + +// AIDL Fuzz version of libhealth2impl. +cc_library_static { + name: "fuzz_libhealth_aidl_impl", + defaults: [ + "libhealth_aidl_common_defaults", + "libhealth_aidl_charger_defaults", + ], + recovery_available: true, + export_include_dirs: ["include"], + export_static_lib_headers: [ + "libbatterymonitor", + ], + srcs: [ + "ChargerUtils.cpp", + "health-convert.cpp", + "HalHealthLoop.cpp", + "Health.cpp", + "LinkedCallback.cpp", + ], + target: { + recovery: { + exclude_srcs: [ + "ChargerUtils.cpp", + ], + }, + }, +} + +cc_fuzz { + name: "android.hardware.health-service.aidl_fuzzer", + defaults: [ + "libhealth_aidl_impl_user", + ], + static_libs: [ + "android.hardware.health-V1-ndk", + "libbase", + "libbinder_random_parcel", + "libcutils", + "liblog", + "libutils", + "fuzz_libhealth_aidl_impl", + ], + target: { + android: { + shared_libs: [ + "libbinder_ndk", + "libbinder", + ], + }, + host: { + static_libs: [ + "libbinder_ndk", + "libbinder", + ], + }, + darwin: { + enabled: false, + }, + }, + srcs: ["fuzzer.cpp"], + fuzz_config: { + cc: [ + "hamzeh@google.com", + ], + }, +} diff --git a/health/aidl/default/fuzzer.cpp b/health/aidl/default/fuzzer.cpp new file mode 100644 index 0000000000..b7c6d3900e --- /dev/null +++ b/health/aidl/default/fuzzer.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * 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 +#include + +#include +#include +#include +#include + +using aidl::android::hardware::health::Health; +using android::fuzzService; +using ndk::SharedRefBase; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + auto config = std::make_unique(); + ::android::hardware::health::InitHealthdConfig(config.get()); + auto binder = ndk::SharedRefBase::make("default", std::move(config)); + + fuzzService(binder->asBinder().get(), FuzzedDataProvider(data, size)); + + return 0; +} \ No newline at end of file