From 96090ef9dc8aa22f99d73fd0253708567a4d248e Mon Sep 17 00:00:00 2001 From: Karthik Ravi Shankar Date: Wed, 6 Dec 2017 18:06:21 -0800 Subject: [PATCH] Fix the binder calling identity in setVrMode When an app calls setVrMode, we end up moving the task stack which needs MANAGE_ACTIVITY_STACKS permission which the app can never get. So, clear the binder identity of the app while making this call. Testing: android.vr.cts.VrSetFIFOThreadTest Bug: 65743448 Change-Id: Id37968f4fb5531edadb0726e5fc04b2470d2d0e5 Signed-off-by: Karthik Ravi Shankar (cherry picked from commit ac214bbfa2ebd8863cb36e3f002760ef3293b0da) --- .../server/am/ActivityManagerService.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 063c1f1cb5979..38c4b13af2eb0 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -14288,14 +14288,20 @@ public class ActivityManagerService extends IActivityManager.Stub return err; } - synchronized(this) { - r.requestedVrComponent = (enabled) ? packageName : null; + // Clear the binder calling uid since this path may call moveToTask(). + final long callingId = Binder.clearCallingIdentity(); + try { + synchronized(this) { + r.requestedVrComponent = (enabled) ? packageName : null; - // Update associated state if this activity is currently focused - if (r == mStackSupervisor.getResumedActivityLocked()) { - applyUpdateVrModeLocked(r); + // Update associated state if this activity is currently focused + if (r == mStackSupervisor.getResumedActivityLocked()) { + applyUpdateVrModeLocked(r); + } + return 0; } - return 0; + } finally { + Binder.restoreCallingIdentity(callingId); } }