From 79d1db2838a3854887379fff558aa56d65eee3d4 Mon Sep 17 00:00:00 2001 From: Patrick Baumann Date: Fri, 24 Apr 2020 08:34:52 -0700 Subject: [PATCH] Fixes shouldFilterApplication usages This change addresses one misuse of shouldFilter* where the binary logic was inverted. It also makes the response of getPackageEnabled* and getComponentEnabled* consistent by always throwing if a packageName is not known to the caller. Fixes: 145676437 Test: atest AppEnumerationTests Change-Id: Ieaaa894a05c00c3cb3b3b2ebdf64a6948b23b475 --- .../server/pm/PackageManagerService.java | 28 ++++++++++++------- .../java/com/android/server/pm/Settings.java | 10 ++++--- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7adafe3ed658d..2402f318bcfb6 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2376,7 +2376,7 @@ public class PackageManagerService extends IPackageManager.Stub for (String packageName : packages) { PackageSetting setting = mSettings.mPackages.get(packageName); if (setting != null - && shouldFilterApplicationLocked(setting, callingUid, callingUserId)) { + && !shouldFilterApplicationLocked(setting, callingUid, callingUserId)) { notifyInstallObserver(packageName); } } @@ -20996,11 +20996,15 @@ public class PackageManagerService extends IPackageManager.Stub false /* requireFullPermission */, false /* checkShell */, "get enabled"); // reader synchronized (mLock) { - if (shouldFilterApplicationLocked( - mSettings.getPackageLPr(packageName), callingUid, userId)) { - return COMPONENT_ENABLED_STATE_DISABLED; + try { + if (shouldFilterApplicationLocked( + mSettings.getPackageLPr(packageName), callingUid, userId)) { + throw new PackageManager.NameNotFoundException(packageName); + } + return mSettings.getApplicationEnabledSettingLPr(packageName, userId); + } catch (PackageManager.NameNotFoundException e) { + throw new IllegalArgumentException("Unknown package: " + packageName); } - return mSettings.getApplicationEnabledSettingLPr(packageName, userId); } } @@ -21012,12 +21016,16 @@ public class PackageManagerService extends IPackageManager.Stub mPermissionManager.enforceCrossUserPermission(callingUid, userId, false /*requireFullPermission*/, false /*checkShell*/, "getComponentEnabled"); synchronized (mLock) { - if (shouldFilterApplicationLocked( - mSettings.getPackageLPr(component.getPackageName()), callingUid, - component, TYPE_UNKNOWN, userId)) { - return COMPONENT_ENABLED_STATE_DISABLED; + try { + if (shouldFilterApplicationLocked( + mSettings.getPackageLPr(component.getPackageName()), callingUid, + component, TYPE_UNKNOWN, userId)) { + throw new PackageManager.NameNotFoundException(component.getPackageName()); + } + return mSettings.getComponentEnabledSettingLPr(component, userId); + } catch (PackageManager.NameNotFoundException e) { + throw new IllegalArgumentException("Unknown component: " + component); } - return mSettings.getComponentEnabledSettingLPr(component, userId); } } diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index ddeab29c5b78d..7158af6d5310f 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4363,19 +4363,21 @@ public final class Settings { return pkg.installSource.isOrphaned; } - int getApplicationEnabledSettingLPr(String packageName, int userId) { + int getApplicationEnabledSettingLPr(String packageName, int userId) + throws PackageManager.NameNotFoundException { final PackageSetting pkg = mPackages.get(packageName); if (pkg == null) { - throw new IllegalArgumentException("Unknown package: " + packageName); + throw new PackageManager.NameNotFoundException(packageName); } return pkg.getEnabled(userId); } - int getComponentEnabledSettingLPr(ComponentName componentName, int userId) { + int getComponentEnabledSettingLPr(ComponentName componentName, int userId) + throws PackageManager.NameNotFoundException { final String packageName = componentName.getPackageName(); final PackageSetting pkg = mPackages.get(packageName); if (pkg == null) { - throw new IllegalArgumentException("Unknown component: " + componentName); + throw new PackageManager.NameNotFoundException(componentName.getPackageName()); } final String classNameStr = componentName.getClassName(); return pkg.getCurrentEnabledStateLPr(classNameStr, userId);