diff options
author | 2025-02-26 00:32:16 +0000 | |
---|---|---|
committer | 2025-03-03 18:52:06 +0000 | |
commit | 19561e21b3a60f3938180de1ddde6b1294948557 (patch) | |
tree | aad0ae4b110a2b17cc4dfa081548ccd65b2a63c2 /libs | |
parent | ea332b76641fcba3bdf457c255235f8c6746b623 (diff) |
Add meta transactions in fuzzService
Test: atest fuzz_service_test
Bug: 295942369
Change-Id: Iab3918371a415afc489b55997257d3ed9b9e5651
Diffstat (limited to 'libs')
-rw-r--r-- | libs/binder/tests/parcel_fuzzer/Android.bp | 3 | ||||
-rw-r--r-- | libs/binder/tests/parcel_fuzzer/libbinder_driver.cpp | 35 |
2 files changed, 28 insertions, 10 deletions
diff --git a/libs/binder/tests/parcel_fuzzer/Android.bp b/libs/binder/tests/parcel_fuzzer/Android.bp index cac054eb1b..457eaa5a76 100644 --- a/libs/binder/tests/parcel_fuzzer/Android.bp +++ b/libs/binder/tests/parcel_fuzzer/Android.bp @@ -109,6 +109,9 @@ cc_library_static { "libcutils", "libutils", ], + header_libs: [ + "libaidl_transactions", + ], local_include_dirs: ["include_random_parcel"], export_include_dirs: ["include_random_parcel"], } diff --git a/libs/binder/tests/parcel_fuzzer/libbinder_driver.cpp b/libs/binder/tests/parcel_fuzzer/libbinder_driver.cpp index 02e69cc371..11aa76891b 100644 --- a/libs/binder/tests/parcel_fuzzer/libbinder_driver.cpp +++ b/libs/binder/tests/parcel_fuzzer/libbinder_driver.cpp @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +#include <aidl/transaction_ids.h> #include <fuzzbinder/libbinder_driver.h> #include <fuzzbinder/random_parcel.h> @@ -31,6 +33,28 @@ void fuzzService(const sp<IBinder>& binder, FuzzedDataProvider&& provider) { fuzzService(std::vector<sp<IBinder>>{binder}, std::move(provider)); } +uint32_t getCode(FuzzedDataProvider& provider) { + if (provider.ConsumeBool()) { + return provider.ConsumeIntegral<uint32_t>(); + } + + // Most of the AIDL services will have small set of transaction codes. + if (provider.ConsumeBool()) { + return provider.ConsumeIntegralInRange<uint32_t>(0, 100); + } + + if (provider.ConsumeBool()) { + return provider.PickValueInArray<uint32_t>( + {IBinder::DUMP_TRANSACTION, IBinder::PING_TRANSACTION, + IBinder::SHELL_COMMAND_TRANSACTION, IBinder::INTERFACE_TRANSACTION, + IBinder::SYSPROPS_TRANSACTION, IBinder::EXTENSION_TRANSACTION, + IBinder::TWEET_TRANSACTION, IBinder::LIKE_TRANSACTION}); + } + + return provider.ConsumeIntegralInRange<uint32_t>(aidl::kLastMetaMethodId, + aidl::kFirstMetaMethodId); +} + void fuzzService(const std::vector<sp<IBinder>>& binders, FuzzedDataProvider&& provider) { RandomParcelOptions options{ .extraBinders = binders, @@ -61,16 +85,7 @@ void fuzzService(const std::vector<sp<IBinder>>& binders, FuzzedDataProvider&& p } while (provider.remaining_bytes() > 0) { - // Most of the AIDL services will have small set of transaction codes. - // TODO(b/295942369) : Add remaining transact codes from IBinder.h - uint32_t code = provider.ConsumeBool() ? provider.ConsumeIntegral<uint32_t>() - : provider.ConsumeBool() - ? provider.ConsumeIntegralInRange<uint32_t>(0, 100) - : provider.PickValueInArray<uint32_t>( - {IBinder::DUMP_TRANSACTION, IBinder::PING_TRANSACTION, - IBinder::SHELL_COMMAND_TRANSACTION, IBinder::INTERFACE_TRANSACTION, - IBinder::SYSPROPS_TRANSACTION, IBinder::EXTENSION_TRANSACTION, - IBinder::TWEET_TRANSACTION, IBinder::LIKE_TRANSACTION}); + uint32_t code = getCode(provider); uint32_t flags = provider.ConsumeIntegral<uint32_t>(); Parcel data; // for increased fuzz coverage |