diff options
author | Biddu Singh <biddubhushan@google.com> | 2022-08-03 10:49:20 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-08-03 10:49:20 +0000 |
commit | 747ddbf0971a43fdcb2061a7bff20de514d639b6 (patch) | |
tree | cbee429f7288ea2bcc419c9061bbea8a9bb686db | |
parent | 640221d0289af66715332c22c9c1d9d3ade9631a (diff) | |
parent | 10661889c47d30fff88c8ba13a5d01a6357a2609 (diff) | |
download | native-747ddbf0971a43fdcb2061a7bff20de514d639b6.tar.gz |
Merge "Add cputimeinstate_fuzzer" am: 10661889c4
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2152597
Change-Id: I5eb1398e2de291de2e172f29f72a4e5b73fc5d68
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/Android.bp | 32 | ||||
-rw-r--r-- | libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/cputimeinstate_fuzzer.cpp | 56 |
2 files changed, 88 insertions, 0 deletions
diff --git a/libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/Android.bp b/libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/Android.bp new file mode 100644 index 0000000000..416e34e3d2 --- /dev/null +++ b/libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/Android.bp @@ -0,0 +1,32 @@ +/****************************************************************************** + * + * 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. + * + ***************************************************************************** + */ +cc_fuzz { + name: "cputimeinstate_fuzzer", + srcs: [ + "cputimeinstate_fuzzer.cpp", + ], + static_libs: [ + "libtimeinstate", + ], + shared_libs: [ + "libbpf_bcc", + "libbase", + "libbpf_minimal", + ], +} diff --git a/libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/cputimeinstate_fuzzer.cpp b/libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/cputimeinstate_fuzzer.cpp new file mode 100644 index 0000000000..f835997187 --- /dev/null +++ b/libs/cputimeinstate/fuzz/cputimeinstate_fuzzer/cputimeinstate_fuzzer.cpp @@ -0,0 +1,56 @@ +/****************************************************************************** + * + * 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 <fuzzer/FuzzedDataProvider.h> +#include <android-base/unique_fd.h> +#include <cputimeinstate.h> + +using namespace android::bpf; + +static const uint16_t MAX_VEC_SIZE = 500; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + FuzzedDataProvider fdp(data, size); + + uint32_t uid = fdp.ConsumeIntegral<uint32_t>(); + uint64_t lastUpdate = fdp.ConsumeIntegral<uint64_t>(); + uint16_t aggregationKey = fdp.ConsumeIntegral<uint16_t>(); + pid_t pid = fdp.ConsumeIntegral<pid_t>(); + std::vector<uint16_t> aggregationKeys; + uint16_t aggregationKeysSize = fdp.ConsumeIntegralInRange<size_t>(0, MAX_VEC_SIZE); + for (uint16_t i = 0; i < aggregationKeysSize; i++) { + aggregationKeys.push_back(fdp.ConsumeIntegral<uint16_t>()); + } + + // To randomize the API calls + while (fdp.remaining_bytes() > 0) { + auto func = fdp.PickValueInArray<const std::function<void()>>({ + [&]() { getUidCpuFreqTimes(uid); }, + [&]() { getUidsUpdatedCpuFreqTimes(&lastUpdate); }, + [&]() { getUidConcurrentTimes(uid);}, + [&]() { getUidsUpdatedConcurrentTimes(&lastUpdate); }, + [&]() { startAggregatingTaskCpuTimes(pid, aggregationKey); }, + [&]() { getAggregatedTaskCpuFreqTimes(pid, aggregationKeys); }, + }); + + func(); + } + + return 0; +} |