diff options
| author | 2023-01-05 12:55:25 -0800 | |
|---|---|---|
| committer | 2023-01-05 15:19:50 -0800 | |
| commit | 8630254ec87d1f407cb5a818eb8e5fad19e0a87d (patch) | |
| tree | fc386ac5180924d789d40f83df6080dd173cf581 | |
| parent | 947220afcbd23b0bf845653fa9afd1ca648c7182 (diff) | |
Add QUERY_ALL_PACKAGES permission to getInterventionList
To guard query information from apps and only allow system
and shell command.
Bug: 249056757
Test: atest GameManagerServiceTests
Change-Id: I5855b887d99b5fae0471bda98dcd2d86134032ba
| -rw-r--r-- | services/core/java/com/android/server/app/GameManagerService.java | 2 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java | 28 |
2 files changed, 30 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 46d3ff1273ec..d7386183e905 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -1762,7 +1762,9 @@ public final class GameManagerService extends IGameManagerService.Stub { /** * Returns the string listing all the interventions currently set to a game. */ + @RequiresPermission(Manifest.permission.QUERY_ALL_PACKAGES) public String getInterventionList(String packageName, int userId) { + checkPermission(Manifest.permission.QUERY_ALL_PACKAGES); final GamePackageConfiguration packageConfig = getConfig(packageName, userId); final StringBuilder listStrSb = new StringBuilder(); if (packageConfig == null) { diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java index d3fa92ce68d7..94cfa42868b0 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -262,6 +262,16 @@ public class GameManagerServiceTests { mTestLooper.dispatchAll(); } + private void mockQueryAllPackageGranted() { + mMockContext.setPermission(Manifest.permission.QUERY_ALL_PACKAGES, + PackageManager.PERMISSION_GRANTED); + } + + private void mockQueryAllPackageDenied() { + mMockContext.setPermission(Manifest.permission.QUERY_ALL_PACKAGES, + PackageManager.PERMISSION_DENIED); + } + private void mockManageUsersGranted() { mMockContext.setPermission(Manifest.permission.MANAGE_USERS, PackageManager.PERMISSION_GRANTED); @@ -2180,4 +2190,22 @@ public class GameManagerServiceTests { verify(mMockPowerManager, never()).setPowerMode(anyInt(), anyBoolean()); assertFalse(gameManagerService.mHandler.hasMessages(CANCEL_GAME_LOADING_MODE)); } + + @Test + public void testGetInterventionList_permissionDenied() throws Exception { + String configString = "mode=2,downscaleFactor=0.5"; + when(DeviceConfig.getProperty(anyString(), anyString())) + .thenReturn(configString); + mockQueryAllPackageDenied(); + GameManagerService gameManagerService = createServiceAndStartUser(USER_ID_1); + assertThrows(SecurityException.class, + () -> gameManagerService.getInterventionList(mPackageName, USER_ID_1)); + + mockQueryAllPackageGranted(); + String expectedInterventionListOutput = "\n[Name:" + mPackageName + + " Modes: {2=[Game Mode:2,Scaling:0.5,Use Angle:false," + + "Fps:,Loading Boost Duration:-1]}]"; + assertEquals(expectedInterventionListOutput, + gameManagerService.getInterventionList(mPackageName, USER_ID_1)); + } } |