From 810855c1cbcd2bc6dcf58a182833473479956197 Mon Sep 17 00:00:00 2001 From: Jackal Guo Date: Thu, 25 Nov 2021 11:27:34 +0800 Subject: [PATCH] Enforce owner rights check to setSplashScreenTheme In the normal cases, setSplashScreenTheme should only work while the target package and the calling uid are from the same package and user. Adding the checking to setSplashScreenTheme. Bug: 206474016 Test: atest PackageManagerServiceTest Test: atest CtsWindowManagerDeviceTestCases:SplashscreenTests \ #testOverrideSplashscreenTheme Change-Id: Ib9fb4214d8b14bfedd99a8e99849ca11fe97efe3 Merged-In: Ib9fb4214d8b14bfedd99a8e99849ca11fe97efe3 --- .../server/pm/PackageManagerService.java | 8 +++- services/tests/servicestests/Android.bp | 1 + services/tests/servicestests/AndroidTest.xml | 11 ++++++ .../server/pm/PackageManagerServiceTest.java | 37 +++++++++++++++++++ .../test-apps/StubApp/Android.bp | 37 +++++++++++++++++++ .../test-apps/StubApp/AndroidManifest.xml | 25 +++++++++++++ .../apps/stubapp/TestActivity.java | 22 +++++++++++ 7 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 services/tests/servicestests/test-apps/StubApp/Android.bp create mode 100644 services/tests/servicestests/test-apps/StubApp/AndroidManifest.xml create mode 100644 services/tests/servicestests/test-apps/StubApp/src/com/android/servicestests/apps/stubapp/TestActivity.java diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7d68f8dd0d615..ba11e9c26dfed 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -28825,8 +28825,12 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void setSplashScreenTheme(@NonNull String packageName, @Nullable String themeId, int userId) { - int callingUid = Binder.getCallingUid(); - PackageSetting packageSetting = getPackageSettingForUser(packageName, callingUid, userId); + final int callingUid = Binder.getCallingUid(); + enforceCrossUserPermission(callingUid, userId, false /* requireFullPermission */, + false /* checkShell */, "setSplashScreenTheme"); + enforceOwnerRights(packageName, callingUid); + final PackageSetting packageSetting = getPackageSettingForUser(packageName, callingUid, + userId); if (packageSetting != null) { packageSetting.setSplashScreenTheme(userId, themeId); } diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index 339a5f916b4b8..7020744d661cd 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -110,6 +110,7 @@ android_test { data: [ ":JobTestApp", + ":StubTestApp", ], java_resources: [ diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml index 5a0f1ee963a2e..4c638d669019f 100644 --- a/services/tests/servicestests/AndroidTest.xml +++ b/services/tests/servicestests/AndroidTest.xml @@ -28,6 +28,17 @@