Clear calling identity when requesting syncInputTransaction

The syncInputTransaction can trigger a performSurfacePlacement which
could result in a callback to the client. In that case, the calling PID
will be incorrect since we didn't clear the calling identity before
requesting the performSurfacePlacement.

Bug: 154665556
Test: Hard to reproduce. Existing tests pass
Change-Id: Id7c35d356cfc435e2de225e4e0d3979751c5c7d4
This commit is contained in:
chaviw
2020-05-20 11:34:52 -07:00
parent f13d436c2e
commit 0f3b9572b7

View File

@@ -7922,18 +7922,23 @@ public class WindowManagerService extends IWindowManager.Stub
@Override
public void syncInputTransactions() {
waitForAnimationsToComplete();
long token = Binder.clearCallingIdentity();
try {
waitForAnimationsToComplete();
// Collect all input transactions from all displays to make sure we could sync all input
// windows at same time.
final SurfaceControl.Transaction t = mTransactionFactory.get();
synchronized (mGlobalLock) {
mWindowPlacerLocked.performSurfacePlacementIfScheduled();
mRoot.forAllDisplays(displayContent ->
displayContent.getInputMonitor().updateInputWindowsImmediately(t));
// Collect all input transactions from all displays to make sure we could sync all input
// windows at same time.
final SurfaceControl.Transaction t = mTransactionFactory.get();
synchronized (mGlobalLock) {
mWindowPlacerLocked.performSurfacePlacementIfScheduled();
mRoot.forAllDisplays(displayContent ->
displayContent.getInputMonitor().updateInputWindowsImmediately(t));
}
t.syncInputWindows().apply();
} finally {
Binder.restoreCallingIdentity(token);
}
t.syncInputWindows().apply();
}
/**