From f060617555e8c53ebf7ac5cc5c899f8f0dc9f0b3 Mon Sep 17 00:00:00 2001 From: Reema Bajwa Date: Mon, 27 Mar 2023 17:35:50 +0000 Subject: [PATCH] Fix bug in permission checking Bug: 275254900 Test: built locally Change-Id: I3e55948da258425609c3161039e917031988562a --- .../credentials/CredentialProviderInfoFactory.java | 3 ++- .../service/credentials/PermissionUtils.java | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core/java/android/service/credentials/CredentialProviderInfoFactory.java b/core/java/android/service/credentials/CredentialProviderInfoFactory.java index 47b75d1358135..0aed8c30a92a7 100644 --- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java +++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java @@ -167,7 +167,8 @@ public final class CredentialProviderInfoFactory { Slog.w(TAG, "Context is null in isSystemProviderWithValidPermission"); return false; } - return PermissionUtils.hasPermission(context, serviceInfo.packageName, + return PermissionUtils.isSystemApp(context, serviceInfo.packageName) + && PermissionUtils.hasPermission(context, serviceInfo.packageName, Manifest.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE); } diff --git a/core/java/android/service/credentials/PermissionUtils.java b/core/java/android/service/credentials/PermissionUtils.java index c8bb202c35f78..d958111f2e0ed 100644 --- a/core/java/android/service/credentials/PermissionUtils.java +++ b/core/java/android/service/credentials/PermissionUtils.java @@ -30,16 +30,19 @@ public class PermissionUtils { /** Checks whether the given package name hold the given permission **/ public static boolean hasPermission(Context context, String packageName, String permission) { + return context.getPackageManager().checkPermission(permission, packageName) + == PackageManager.PERMISSION_GRANTED; + } + + /** Checks whether the given package name is a system app on the device **/ + public static boolean isSystemApp(Context context, String packageName) { try { ApplicationInfo appInfo = context.getPackageManager() - .getApplicationInfo( - packageName, + .getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of( PackageManager.MATCH_SYSTEM_ONLY)); - if (appInfo != null - && context.checkPermission(permission, /* pid= */ -1, appInfo.uid) - == PackageManager.PERMISSION_GRANTED) { + if (appInfo != null) { return true; } } catch (PackageManager.NameNotFoundException e) {