diff options
author | Jeremy Joslin <jjoslin@google.com> | 2015-12-17 17:38:04 -0800 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2016-02-16 12:28:30 -0800 |
commit | bea20d574e7c94ff4664a5d2ada5dc1f70614e2c (patch) | |
tree | 09f27868e64637d8d1bbcd4c1a14c21b46484275 /core | |
parent | 2d78c23e4bdee812679b6de1ec45db879ff268fe (diff) | |
download | frameworks_base-bea20d574e7c94ff4664a5d2ada5dc1f70614e2c.zip frameworks_base-bea20d574e7c94ff4664a5d2ada5dc1f70614e2c.tar.gz frameworks_base-bea20d574e7c94ff4664a5d2ada5dc1f70614e2c.tar.bz2 |
Exit getAllValidScorers early if not the primary.
This fixes the crash that occurs when getAllValidScorers() is invoked by
a non-primary user when a scorer is active.
BUG: 23040221
Change-Id: I42c9e18d74389be3191258ca5626f2c433ca7cc7
(cherry picked from commit 5b294b45d0d7afbed71fd2e59342c5ad7b8b7d76)
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/net/NetworkScorerAppManager.java | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/core/java/android/net/NetworkScorerAppManager.java b/core/java/android/net/NetworkScorerAppManager.java index 29daf35..5880e5d 100644 --- a/core/java/android/net/NetworkScorerAppManager.java +++ b/core/java/android/net/NetworkScorerAppManager.java @@ -33,6 +33,7 @@ import android.util.Log; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; /** @@ -90,8 +91,13 @@ public final class NetworkScorerAppManager { * @return the list of scorers, or the empty list if there are no valid scorers. */ public static Collection<NetworkScorerAppData> getAllValidScorers(Context context) { - List<NetworkScorerAppData> scorers = new ArrayList<>(); + // Network scorer apps can only run as the primary user so exit early if we're not the + // primary user. + if (UserHandle.getCallingUserId() != 0 /*USER_SYSTEM*/) { + return Collections.emptyList(); + } + List<NetworkScorerAppData> scorers = new ArrayList<>(); PackageManager pm = context.getPackageManager(); // Only apps installed under the primary user of the device can be scorers. List<ResolveInfo> receivers = @@ -104,8 +110,9 @@ public final class NetworkScorerAppManager { continue; } if (!permission.BROADCAST_NETWORK_PRIVILEGED.equals(receiverInfo.permission)) { - // Receiver doesn't require the BROADCAST_NETWORK_PRIVILEGED permission, which means - // anyone could trigger network scoring and flood the framework with score requests. + // Receiver doesn't require the BROADCAST_NETWORK_PRIVILEGED permission, which + // means anyone could trigger network scoring and flood the framework with score + // requests. continue; } if (pm.checkPermission(permission.SCORE_NETWORKS, receiverInfo.packageName) != @@ -127,8 +134,8 @@ public final class NetworkScorerAppManager { } } - // NOTE: loadLabel will attempt to load the receiver's label and fall back to the app - // label if none is present. + // NOTE: loadLabel will attempt to load the receiver's label and fall back to the + // app label if none is present. scorers.add(new NetworkScorerAppData(receiverInfo.packageName, receiverInfo.applicationInfo.uid, receiverInfo.loadLabel(pm), configurationActivityClassName)); |