From 4c4ca9a50c43e56d6c448c18b06b7b3a3744c123 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Fri, 16 Oct 2020 15:26:45 -0600 Subject: [PATCH] Make restoreCallingIdentity() @CriticalNative. The validation check that might throw an exception is almost a decade old at this point, and isn't likely to be hit. In addition, the recently added "AndroidFrameworkBinderIdentity" Error Prone checker ensures that clients working with these identities are well-behaved. Removing this exception code is what enables @CriticalNative. Bug: 171078335 Test: none Change-Id: Ib4cc9becf325979a97a9b0e58ac2277f3b226aaa --- core/java/android/os/Binder.java | 1 + core/jni/android_util_Binder.cpp | 12 ++---------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index d492e0870b2e0..fce3437db0496 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -379,6 +379,7 @@ public class Binder implements IBinder { * * @see #clearCallingIdentity */ + @CriticalNative public static final native void restoreCallingIdentity(long token); /** diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index e1180384fcc93..32b8fa61c8a07 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -960,17 +960,8 @@ static jlong android_os_Binder_clearCallingIdentity() return IPCThreadState::self()->clearCallingIdentity(); } -static void android_os_Binder_restoreCallingIdentity(JNIEnv* env, jobject clazz, jlong token) +static void android_os_Binder_restoreCallingIdentity(jlong token) { - // XXX temporary validation check to debug crashes. - int uid = (int)(token>>32); - if (uid > 0 && uid < 999) { - // In Android currently there are no uids in this range. - char buf[128]; - sprintf(buf, "Restoring bad calling ident: 0x%" PRIx64, token); - jniThrowException(env, "java/lang/IllegalStateException", buf); - return; - } IPCThreadState::self()->restoreCallingIdentity(token); } @@ -1064,6 +1055,7 @@ static const JNINativeMethod gBinderMethods[] = { { "isHandlingTransaction", "()Z", (void*)android_os_Binder_isHandlingTransaction }, // @CriticalNative { "clearCallingIdentity", "()J", (void*)android_os_Binder_clearCallingIdentity }, + // @CriticalNative { "restoreCallingIdentity", "(J)V", (void*)android_os_Binder_restoreCallingIdentity }, // @CriticalNative { "setThreadStrictModePolicy", "(I)V", (void*)android_os_Binder_setThreadStrictModePolicy },