Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b44ed765 authored by Pawan Wagh's avatar Pawan Wagh
Browse files

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
parent e618e292
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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();
}
+14 −0
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@

#include "random_parcel_jni.h"
#include <android_util_Binder.h>
#include <android_os_Parcel.h>
#include <fuzzbinder/libbinder_driver.h>
#include <fuzzbinder/random_parcel.h>
#include <fuzzer/FuzzedDataProvider.h>
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<size_t>(env->GetArrayLength(fuzzData));
    uint8_t data[len];
    env->GetByteArrayRegion(fuzzData, 0, len, reinterpret_cast<jbyte*>(data));

    FuzzedDataProvider provider(data, len);
    RandomParcelOptions options;

    Parcel* parcel = parcelForJavaObject(env, jparcel);
    fillRandomParcel(parcel, std::move(provider), &options);
}
+2 −0
Original line number Diff line number Diff line
@@ -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);
}