From c6e7343756f510c878e53390ea82e5936b9c16d8 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Thu, 4 Aug 2022 11:36:26 -0700 Subject: [PATCH] Context#startInstrumentation could be started from SHELL only now. ...or it'll throw a SecurityException. Bug: 237766679 Test: atest CtsAppTestCases:InstrumentationTest Change-Id: Ia08f225c21a3933067d066a578ea4af9c23e7d4c --- .../com/android/server/am/ActivityManagerService.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 5729a06830cfb..6921bf6c47713 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -14692,6 +14692,17 @@ public class ActivityManagerService extends IActivityManager.Stub } } + if (!Build.IS_DEBUGGABLE && callingUid != ROOT_UID && callingUid != SHELL_UID + && callingUid != SYSTEM_UID) { + // If it's not debug build and not called from root/shell/system uid, reject it. + String msg = "Permission Denial: instrumentation test " + + className + " from pid=" + callingPid + ", uid=" + callingUid + + " not allowed because target package " + ii.targetPackage + + " is not debuggable."; + reportStartInstrumentationFailureLocked(watcher, className, msg); + throw new SecurityException(msg); + } + boolean disableHiddenApiChecks = ai.usesNonSdkApi() || (flags & INSTR_FLAG_DISABLE_HIDDEN_API_CHECKS) != 0; boolean disableTestApiChecks = disableHiddenApiChecks