Fix NetworkScorerAppManager#isCallerActiveScorer.

The current implementation checks whether the caller's uid has the
SCORE_NETWORKS permission instead of checking the passed in callingUid. I
removed this check entirely because the getActiveScorer method already checks
whether the scorer's package has the SCORE_NETWORKS permission. There is no way
callingUid can equal the active scoring package's uid without also having the
SCORE_NETWORKS permission.

Bug: 34107721
Test: runtest --path core/tests/coretests/src/android/net/NetworkScorerAppManagerTest.java
Change-Id: Ifd427792169837c84a10a76b208c76137db06ae9
This commit is contained in:
Amin Shaikh
2017-01-05 14:28:47 -08:00
parent a54d76a81f
commit 2cd918a63e
2 changed files with 20 additions and 7 deletions

View File

@@ -231,13 +231,7 @@ public class NetworkScorerAppManager {
if (defaultApp == null) {
return false;
}
if (callingUid != defaultApp.packageUid) {
return false;
}
// To be extra safe, ensure the caller holds the SCORE_NETWORKS permission. It always
// should, since it couldn't become the active scorer otherwise, but this can't hurt.
return mContext.checkCallingPermission(Manifest.permission.SCORE_NETWORKS) ==
PackageManager.PERMISSION_GRANTED;
return callingUid == defaultApp.packageUid;
}
private boolean isNetworkRecommendationsDisabled() {

View File

@@ -169,6 +169,25 @@ public class NetworkScorerAppManagerTest extends InstrumentationTestCase {
assertNull(activeScorer);
}
public void testIsCallerActiveScorer_providerNotAvailable() throws Exception {
ContentResolver cr = mTargetContext.getContentResolver();
Settings.Global.putInt(cr, Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, 1);
assertFalse(mNetworkScorerAppManager.isCallerActiveScorer(924));
}
public void testIsCallerActiveScorer_providerAvailable() throws Exception {
setNetworkRecommendationPackageNames("package1");
mockScoreNetworksGranted("package1");
mockRecommendationServiceAvailable("package1", 924 /* packageUid */);
ContentResolver cr = mTargetContext.getContentResolver();
Settings.Global.putInt(cr, Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, 1);
assertTrue(mNetworkScorerAppManager.isCallerActiveScorer(924));
assertFalse(mNetworkScorerAppManager.isCallerActiveScorer(925));
}
private void setNetworkRecommendationPackageNames(String... names) {
if (names == null) {
names = new String[0];