From b44ed765ab6f79ecac78669e35e9676c8a96207d Mon Sep 17 00:00:00 2001 From: Pawan Wagh Date: Tue, 29 Nov 2022 11:49:54 +0000 Subject: [PATCH] Adding JNI for create random parcel Adding an interface in random_parcel_lib and librandom_parcel_jni to fill a parcel created by java fuzzers. Test: m random_parcel_lib && m librandom_parcel_jni Bug: 258075762 Change-Id: I0ecfdd676ee3881857b37cf80974d91492c4094f --- core/tests/fuzzers/FuzzService/FuzzBinder.java | 7 +++++++ .../fuzzers/FuzzService/random_parcel_jni.cpp | 14 ++++++++++++++ core/tests/fuzzers/FuzzService/random_parcel_jni.h | 2 ++ 3 files changed, 23 insertions(+) diff --git a/core/tests/fuzzers/FuzzService/FuzzBinder.java b/core/tests/fuzzers/FuzzService/FuzzBinder.java index 7096f52ab3921..52aafeb4bc9d8 100644 --- a/core/tests/fuzzers/FuzzService/FuzzBinder.java +++ b/core/tests/fuzzers/FuzzService/FuzzBinder.java @@ -15,6 +15,7 @@ */ package randomparcel; import android.os.IBinder; +import android.os.Parcel; public class FuzzBinder { static { @@ -33,6 +34,12 @@ public class FuzzBinder { fuzzServiceInternal(binder, data); } + // This API creates random parcel object + public static void createRandomParcel(Parcel parcel, byte[] data) { + getRandomParcel(parcel, data); + } + private static native void fuzzServiceInternal(IBinder binder, byte[] data); + private static native void getRandomParcel(Parcel parcel, byte[] data); private static native int registerNatives(); } diff --git a/core/tests/fuzzers/FuzzService/random_parcel_jni.cpp b/core/tests/fuzzers/FuzzService/random_parcel_jni.cpp index c0528d5c7b9af..dbeae87f32794 100644 --- a/core/tests/fuzzers/FuzzService/random_parcel_jni.cpp +++ b/core/tests/fuzzers/FuzzService/random_parcel_jni.cpp @@ -16,7 +16,9 @@ #include "random_parcel_jni.h" #include +#include #include +#include #include using namespace android; @@ -35,3 +37,15 @@ JNIEXPORT void JNICALL Java_randomparcel_FuzzBinder_fuzzServiceInternal(JNIEnv * JNIEXPORT jint JNICALL Java_randomparcel_FuzzBinder_registerNatives(JNIEnv* env) { return registerFrameworkNatives(env); } + +JNIEXPORT void JNICALL Java_randomparcel_FuzzBinder_getRandomParcel(JNIEnv *env, jobject thiz, jobject jparcel, jbyteArray fuzzData) { + size_t len = static_cast(env->GetArrayLength(fuzzData)); + uint8_t data[len]; + env->GetByteArrayRegion(fuzzData, 0, len, reinterpret_cast(data)); + + FuzzedDataProvider provider(data, len); + RandomParcelOptions options; + + Parcel* parcel = parcelForJavaObject(env, jparcel); + fillRandomParcel(parcel, std::move(provider), &options); +} diff --git a/core/tests/fuzzers/FuzzService/random_parcel_jni.h b/core/tests/fuzzers/FuzzService/random_parcel_jni.h index 20a4c9d46aa60..bc18b2ff6fc7a 100644 --- a/core/tests/fuzzers/FuzzService/random_parcel_jni.h +++ b/core/tests/fuzzers/FuzzService/random_parcel_jni.h @@ -23,4 +23,6 @@ extern "C" { // Function from AndroidRuntime jint registerFrameworkNatives(JNIEnv* env); + + JNIEXPORT void JNICALL Java_randomparcel_FuzzBinder_getRandomParcel(JNIEnv *env, jobject thiz, jobject parcel, jbyteArray fuzzData); }