diff options
| author | 2020-11-11 18:44:05 +0000 | |
|---|---|---|
| committer | 2020-11-11 18:44:05 +0000 | |
| commit | 1f1f2e06795b0435e95eda0afbeddf6083914e09 (patch) | |
| tree | ef0bf133fb5ce71d40442c44c9a35ee2a49dcb5d | |
| parent | 6ffa8e726f5b48e1a24ea904658a9f831834c1b1 (diff) | |
| parent | b908d8a2eeca9828a098bb130dd7d7b026703290 (diff) | |
Merge "IBinder: support FLAG_CLEAR_BUF" am: 9910d9980e am: dcae11d0ef am: 951299fb04 am: b908d8a2ee
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1477120
Change-Id: I78f09ee4eb53da777c3a0962aff82079dc525938
| -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 a04fcb580e63..52427506b3ef 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -300,6 +300,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); @@ -522,6 +524,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 f05c6a42c5f7..787d34822ef7 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); @@ -741,6 +749,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}, |