OSDN Git Service

Don't mark NetworkRequests restricted when they don't have restricted caps
authorPaul Jensen <pauljensen@google.com>
Fri, 28 Aug 2015 16:00:15 +0000 (12:00 -0400)
committerThe Android Automerger <android-build@android.com>
Mon, 28 Sep 2015 23:29:57 +0000 (16:29 -0700)
Requests without NET_CAPABILITIES_INTERNET and just the default network
capabilities should not be marked restricted.  Without this fix apps
can hit permissions exceptions if they inadvertently make requests
without NET_CAPABILITIES_INTERNET.

Bug:23164917
Change-Id: I4c7136821315bcb05dfc42ffbc505a5d4f6109e6
(cherry picked from commit aae613d96134245af7c55976731a49fa59e77470)

core/java/android/net/NetworkCapabilities.java

index 76c24ba..0720885 100644 (file)
@@ -281,8 +281,12 @@ public final class NetworkCapabilities implements Parcelable {
     public void maybeMarkCapabilitiesRestricted() {
         // If all the capabilities are typically provided by restricted networks, conclude that this
         // network is restricted.
-        if ((mNetworkCapabilities & ~(DEFAULT_CAPABILITIES | RESTRICTED_CAPABILITIES)) == 0)
+        if ((mNetworkCapabilities & ~(DEFAULT_CAPABILITIES | RESTRICTED_CAPABILITIES)) == 0 &&
+                // Must have at least some restricted capabilities, otherwise a request for an
+                // internet-less network will get marked restricted.
+                (mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0) {
             removeCapability(NET_CAPABILITY_NOT_RESTRICTED);
+        }
     }
 
     /**