diff options
author | Steven Moreland <smoreland@google.com> | 2020-11-11 16:17:20 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-11-11 16:17:20 +0000 |
commit | 9910d9980e4872bbe56b146170b2659e1796a9e3 (patch) | |
tree | 33fcb5d639c4eb7cea4d71d7b86456ad8d94f78d | |
parent | 9f42b2859b6fc2a475ca59dd45c3c7f6c409e236 (diff) | |
parent | fbe12547099123e6b7fd867750df26ee0ca6e2d1 (diff) |
Merge "IBinder: support FLAG_CLEAR_BUF"
-rw-r--r-- | core/java/android/os/IBinder.java | 9 | ||||
-rw-r--r-- | core/java/android/os/Parcel.java | 10 | ||||
-rw-r--r-- | core/jni/android_os_Parcel.cpp | 10 |
3 files changed, 29 insertions, 0 deletions
diff --git a/core/java/android/os/IBinder.java b/core/java/android/os/IBinder.java index d91c458a474b..010459d06e8d 100644 --- a/core/java/android/os/IBinder.java +++ b/core/java/android/os/IBinder.java @@ -170,6 +170,15 @@ public interface IBinder { int FLAG_ONEWAY = 0x00000001; /** + * Flag to {@link #transact}: request binder driver to clear transaction data. + * + * Be very careful when using this flag in Java, since Java objects read from a Java + * Parcel may be non-trivial to clear. + * @hide + */ + int FLAG_CLEAR_BUF = 0x00000020; + + /** * @hide */ int FLAG_COLLECT_NOTED_APP_OPS = 0x00000002; diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 9c7f8be6526b..cf90174924f1 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -277,6 +277,8 @@ public final class Parcel { private static final int EX_TRANSACTION_FAILED = -129; @CriticalNative + private static native void nativeMarkSensitive(long nativePtr); + @CriticalNative private static native int nativeDataSize(long nativePtr); @CriticalNative private static native int nativeDataAvail(long nativePtr); @@ -491,6 +493,14 @@ public final class Parcel { public static native long getGlobalAllocCount(); /** + * Parcel data should be zero'd before realloc'd or deleted. + * @hide + */ + public final void markSensitive() { + nativeMarkSensitive(mNativePtr); + } + + /** * Returns the total amount of data contained in the parcel. */ public final int dataSize() { diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp index 9c7ee0c641a6..241570a7f9d3 100644 --- a/core/jni/android_os_Parcel.cpp +++ b/core/jni/android_os_Parcel.cpp @@ -90,6 +90,14 @@ void recycleJavaParcelObject(JNIEnv* env, jobject parcelObj) env->CallVoidMethod(parcelObj, gParcelOffsets.recycle); } +static void android_os_Parcel_markSensitive(jlong nativePtr) +{ + Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr); + if (parcel) { + parcel->markSensitive(); + } +} + static jint android_os_Parcel_dataSize(jlong nativePtr) { Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr); @@ -758,6 +766,8 @@ static jboolean android_os_Parcel_replaceCallingWorkSourceUid(jlong nativePtr, j static const JNINativeMethod gParcelMethods[] = { // @CriticalNative + {"nativeMarkSensitive", "(J)V", (void*)android_os_Parcel_markSensitive}, + // @CriticalNative {"nativeDataSize", "(J)I", (void*)android_os_Parcel_dataSize}, // @CriticalNative {"nativeDataAvail", "(J)I", (void*)android_os_Parcel_dataAvail}, |