diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index 8dcd93731aec0..635f58182b346 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -549,6 +549,16 @@ public class Binder implements IBinder { @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public final native void markVintfStability(); + /** + * Use a VINTF-stability binder w/o VINTF requirements. Should be called + * on a binder before it is sent out of process. + * + * This must be called before the object is sent to another process. + * + * @hide + */ + public final native void forceDowngradeToSystemStability(); + /** * Flush any Binder commands pending in the current thread to the kernel * driver. This can be diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index 2e4be145d54d4..29f8ccf376548 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -487,9 +487,15 @@ public: } void markVintf() { + AutoMutex _l(mLock); mVintf = true; } + void forceDowngradeToSystemStability() { + AutoMutex _l(mLock); + mVintf = false; + } + sp getExtension() { AutoMutex _l(mLock); sp b = mBinder.promote(); @@ -1005,6 +1011,12 @@ static void android_os_Binder_markVintfStability(JNIEnv* env, jobject clazz) { jbh->markVintf(); } +static void android_os_Binder_forceDowngradeToSystemStability(JNIEnv* env, jobject clazz) { + JavaBBinderHolder* jbh = + (JavaBBinderHolder*) env->GetLongField(clazz, gBinderOffsets.mObject); + jbh->forceDowngradeToSystemStability(); +} + static void android_os_Binder_flushPendingCommands(JNIEnv* env, jobject clazz) { IPCThreadState::self()->flushCommands(); @@ -1069,6 +1081,7 @@ static const JNINativeMethod gBinderMethods[] = { { "clearCallingWorkSource", "()J", (void*)android_os_Binder_clearCallingWorkSource }, { "restoreCallingWorkSource", "(J)V", (void*)android_os_Binder_restoreCallingWorkSource }, { "markVintfStability", "()V", (void*)android_os_Binder_markVintfStability}, + { "forceDowngradeToSystemStability", "()V", (void*)android_os_Binder_forceDowngradeToSystemStability}, { "flushPendingCommands", "()V", (void*)android_os_Binder_flushPendingCommands }, { "getNativeBBinderHolder", "()J", (void*)android_os_Binder_getNativeBBinderHolder }, { "getNativeFinalizer", "()J", (void*)android_os_Binder_getNativeFinalizer },