summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2020-11-11 18:44:05 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-11-11 18:44:05 +0000
commit1f1f2e06795b0435e95eda0afbeddf6083914e09 (patch)
treeef0bf133fb5ce71d40442c44c9a35ee2a49dcb5d
parent6ffa8e726f5b48e1a24ea904658a9f831834c1b1 (diff)
parentb908d8a2eeca9828a098bb130dd7d7b026703290 (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.java9
-rw-r--r--core/java/android/os/Parcel.java10
-rw-r--r--core/jni/android_os_Parcel.cpp10
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},