summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mark Chien <markchien@google.com> 2020-03-27 16:53:45 +0000
committer Mark Chien <markchien@google.com> 2020-03-30 02:26:57 +0000
commit44592d13dae1bf6ee476e4bf4e1be2fe4b4f741f (patch)
tree8fac49626b8c6324ecf6900fe82062c2131ff6bf
parent080431efd0c64fe48f18edef9e35a5c9f466b54b (diff)
Unbreak testStartUsingNetworkFeature_enableHipri failure
aosp/1261619 break legacy API that only supported for SDK which is smaller than android M, caller need to have network stack permission to request network with legacy type. Fix failure by whitelist permission check for the caller who built with order SDK(< M). Bug: 152229492 Test: atest CtsTetheringTest atest ConnectivityManagerLegacyTest# \ testStartUsingNetworkFeature_enableHipri Change-Id: I02504c0eed10ee4e08c8fbf032951022255ba5fa Merged-In: I367dff0429f26f266282300edc38637b55eece38 (cherry picked from commit b1c8acf0d6ba1fe35d8e81673d2c5c24fa2fea79)
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 237a961fd338..5d350be5b0c4 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -63,6 +63,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.net.CaptivePortal;
@@ -5405,12 +5406,25 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
}
+ private boolean checkUnsupportedStartingFrom(int version, String callingPackageName) {
+ final PackageManager pm = mContext.getPackageManager();
+ final int userId = UserHandle.getCallingUserId();
+ try {
+ final int callingVersion = pm.getApplicationInfoAsUser(
+ callingPackageName, 0 /* flags */, userId).targetSdkVersion;
+ if (callingVersion < version) return false;
+ } catch (PackageManager.NameNotFoundException e) { }
+ return true;
+ }
+
@Override
public NetworkRequest requestNetwork(NetworkCapabilities networkCapabilities,
Messenger messenger, int timeoutMs, IBinder binder, int legacyType,
@NonNull String callingPackageName) {
if (legacyType != TYPE_NONE && !checkNetworkStackPermission()) {
- throw new SecurityException("Insufficient permissions to specify legacy type");
+ if (checkUnsupportedStartingFrom(Build.VERSION_CODES.M, callingPackageName)) {
+ throw new SecurityException("Insufficient permissions to specify legacy type");
+ }
}
final int callingUid = Binder.getCallingUid();
final NetworkRequest.Type type = (networkCapabilities == null)