From 9904c69fa57ffaf4b557b2d0e6bb30d3db76459f Mon Sep 17 00:00:00 2001 From: Mark Chien Date: Fri, 27 Mar 2020 16:53:45 +0000 Subject: [PATCH] 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) --- .../com/android/server/ConnectivityService.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 237a961fd3..5d350be5b0 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)