From c9c0026c7b16a2863cdb5fc014076a3a0b294ee9 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Thu, 2 Feb 2023 19:05:39 +0800 Subject: [PATCH] Run abandon() in the system server context abandon() will call into StagingManager which might trigger external callbacks. The code should not run in the context of the calling uid. Bug: 267383992 Test: CtsStagedInstallHostTestCases Change-Id: Ib8a1b6bd48388e1dc2362b8f7cbe4c0d41ee3ebc --- .../com/android/server/pm/PackageInstallerSession.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 47e18f1df774d..a8d40fb778dae 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -3995,7 +3995,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { return; } } - r.run(); + + final long token = Binder.clearCallingIdentity(); + try { + // This will call into StagingManager which might trigger external callbacks + r.run(); + } finally { + Binder.restoreCallingIdentity(token); + } } @Override