summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svetoslav <svetoslavganov@google.com> 2015-05-26 14:46:22 -0700
committer Svetoslav <svetoslavganov@google.com> 2015-05-26 15:47:56 -0700
commit0507d6b850218066d3d4e66f18fb408789c06b5c (patch)
tree2e26803f6cd53e431eb7d35912a7543c0c6601d7
parenta04c7d400c7b9d39b56cec3d705eea39a767370e (diff)
Clear binder id after a permissions check before killing a UID.
bug:21035702 Change-Id: I2798d28780421720d85c5b49fa28897aa6c76d97
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java12
1 files changed, 9 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index b111b36276aa..cea54a6819e8 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -11045,9 +11045,15 @@ public final class ActivityManagerService extends ActivityManagerNative
public void killUid(int uid, String reason) {
enforceCallingPermission(Manifest.permission.KILL_UID, "killUid");
synchronized (this) {
- killPackageProcessesLocked(null, UserHandle.getAppId(uid), UserHandle.getUserId(uid),
- ProcessList.FOREGROUND_APP_ADJ-1, false, true, true, false,
- reason != null ? reason : "kill uid");
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ killPackageProcessesLocked(null, UserHandle.getAppId(uid),
+ UserHandle.getUserId(uid),
+ ProcessList.PERSISTENT_PROC_ADJ, false, true, true, true,
+ reason != null ? reason : "kill uid");
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}