Merge "Replace hidden API usages of NetworkCapabilities" am: 3972f1c61c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1645302

Change-Id: I16b2a1e7aaec191dacbffa077ced459d1024370f
This commit is contained in:
Treehugger Robot
2021-03-23 11:32:09 +00:00
committed by Automerger Merge Worker

View File

@@ -19,10 +19,10 @@ package com.android.server.connectivity;
import static android.Manifest.permission.BIND_VPN_SERVICE; import static android.Manifest.permission.BIND_VPN_SERVICE;
import static android.net.ConnectivityManager.NETID_UNSET; import static android.net.ConnectivityManager.NETID_UNSET;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
import static android.os.UserHandle.PER_USER_RANGE;
import static android.net.RouteInfo.RTN_THROW; import static android.net.RouteInfo.RTN_THROW;
import static android.net.RouteInfo.RTN_UNREACHABLE; import static android.net.RouteInfo.RTN_UNREACHABLE;
import static android.net.VpnManager.NOTIFICATION_CHANNEL_VPN; import static android.net.VpnManager.NOTIFICATION_CHANNEL_VPN;
import static android.os.UserHandle.PER_USER_RANGE;
import static com.android.internal.util.Preconditions.checkArgument; import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.internal.util.Preconditions.checkNotNull; import static com.android.internal.util.Preconditions.checkNotNull;
@@ -223,7 +223,7 @@ public class Vpn {
protected NetworkAgent mNetworkAgent; protected NetworkAgent mNetworkAgent;
private final Looper mLooper; private final Looper mLooper;
@VisibleForTesting @VisibleForTesting
protected final NetworkCapabilities mNetworkCapabilities; protected NetworkCapabilities mNetworkCapabilities;
private final SystemServices mSystemServices; private final SystemServices mSystemServices;
private final Ikev2SessionCreator mIkev2SessionCreator; private final Ikev2SessionCreator mIkev2SessionCreator;
private final UserManager mUserManager; private final UserManager mUserManager;
@@ -460,11 +460,12 @@ public class Vpn {
mLegacyState = LegacyVpnInfo.STATE_DISCONNECTED; mLegacyState = LegacyVpnInfo.STATE_DISCONNECTED;
mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_VPN, 0 /* subtype */, NETWORKTYPE, mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_VPN, 0 /* subtype */, NETWORKTYPE,
"" /* subtypeName */); "" /* subtypeName */);
mNetworkCapabilities = new NetworkCapabilities(); mNetworkCapabilities = new NetworkCapabilities.Builder()
mNetworkCapabilities.addTransportType(NetworkCapabilities.TRANSPORT_VPN); .addTransportType(NetworkCapabilities.TRANSPORT_VPN)
mNetworkCapabilities.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN); .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
mNetworkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED); .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED)
mNetworkCapabilities.setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE)); .setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE))
.build();
loadAlwaysOnPackage(); loadAlwaysOnPackage();
} }
@@ -525,8 +526,10 @@ public class Vpn {
} }
private void resetNetworkCapabilities() { private void resetNetworkCapabilities() {
mNetworkCapabilities.setUids(null); mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities)
mNetworkCapabilities.setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE)); .setUids(null)
.setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE))
.build();
} }
/** /**
@@ -1237,7 +1240,9 @@ public class Vpn {
// registered with registerDefaultNetworkCallback. This in turn protects the invariant // registered with registerDefaultNetworkCallback. This in turn protects the invariant
// that an app calling ConnectivityManager#bindProcessToNetwork(getDefaultNetwork()) // that an app calling ConnectivityManager#bindProcessToNetwork(getDefaultNetwork())
// behaves the same as when it uses the default network. // behaves the same as when it uses the default network.
mNetworkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); final NetworkCapabilities.Builder capsBuilder =
new NetworkCapabilities.Builder(mNetworkCapabilities);
capsBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
mLegacyState = LegacyVpnInfo.STATE_CONNECTING; mLegacyState = LegacyVpnInfo.STATE_CONNECTING;
updateState(DetailedState.CONNECTING, "agentConnect"); updateState(DetailedState.CONNECTING, "agentConnect");
@@ -1246,21 +1251,22 @@ public class Vpn {
.setBypassableVpn(mConfig.allowBypass && !mLockdown) .setBypassableVpn(mConfig.allowBypass && !mLockdown)
.build(); .build();
mNetworkCapabilities.setOwnerUid(mOwnerUID); capsBuilder.setOwnerUid(mOwnerUID);
mNetworkCapabilities.setAdministratorUids(new int[] {mOwnerUID}); capsBuilder.setAdministratorUids(new int[] {mOwnerUID});
mNetworkCapabilities.setUids(createUserAndRestrictedProfilesRanges(mUserId, capsBuilder.setUids(createUserAndRestrictedProfilesRanges(mUserId,
mConfig.allowedApplications, mConfig.disallowedApplications)); mConfig.allowedApplications, mConfig.disallowedApplications));
mNetworkCapabilities.setTransportInfo(new VpnTransportInfo(getActiveVpnType())); capsBuilder.setTransportInfo(new VpnTransportInfo(getActiveVpnType()));
// Only apps targeting Q and above can explicitly declare themselves as metered. // Only apps targeting Q and above can explicitly declare themselves as metered.
// These VPNs are assumed metered unless they state otherwise. // These VPNs are assumed metered unless they state otherwise.
if (mIsPackageTargetingAtLeastQ && mConfig.isMetered) { if (mIsPackageTargetingAtLeastQ && mConfig.isMetered) {
mNetworkCapabilities.removeCapability(NET_CAPABILITY_NOT_METERED); capsBuilder.removeCapability(NET_CAPABILITY_NOT_METERED);
} else { } else {
mNetworkCapabilities.addCapability(NET_CAPABILITY_NOT_METERED); capsBuilder.addCapability(NET_CAPABILITY_NOT_METERED);
} }
mNetworkCapabilities = capsBuilder.build();
mNetworkAgent = new NetworkAgent(mContext, mLooper, NETWORKTYPE /* logtag */, mNetworkAgent = new NetworkAgent(mContext, mLooper, NETWORKTYPE /* logtag */,
mNetworkCapabilities, lp, mNetworkCapabilities, lp,
new NetworkScore.Builder().setLegacyInt(VPN_DEFAULT_SCORE).build(), new NetworkScore.Builder().setLegacyInt(VPN_DEFAULT_SCORE).build(),
@@ -1427,7 +1433,8 @@ public class Vpn {
// restore old state // restore old state
mConfig = oldConfig; mConfig = oldConfig;
mConnection = oldConnection; mConnection = oldConnection;
mNetworkCapabilities.setUids(oldUsers); mNetworkCapabilities =
new NetworkCapabilities.Builder(mNetworkCapabilities).setUids(oldUsers).build();
mNetworkAgent = oldNetworkAgent; mNetworkAgent = oldNetworkAgent;
mInterface = oldInterface; mInterface = oldInterface;
throw e; throw e;
@@ -1577,7 +1584,8 @@ public class Vpn {
try { try {
addUserToRanges(existingRanges, userId, mConfig.allowedApplications, addUserToRanges(existingRanges, userId, mConfig.allowedApplications,
mConfig.disallowedApplications); mConfig.disallowedApplications);
mNetworkCapabilities.setUids(existingRanges); mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities)
.setUids(existingRanges).build();
} catch (Exception e) { } catch (Exception e) {
Log.wtf(TAG, "Failed to add restricted user to owner", e); Log.wtf(TAG, "Failed to add restricted user to owner", e);
} }
@@ -1606,7 +1614,8 @@ public class Vpn {
final List<Range<Integer>> removedRanges = final List<Range<Integer>> removedRanges =
uidRangesForUser(userId, existingRanges); uidRangesForUser(userId, existingRanges);
existingRanges.removeAll(removedRanges); existingRanges.removeAll(removedRanges);
mNetworkCapabilities.setUids(existingRanges); mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities)
.setUids(existingRanges).build();
} catch (Exception e) { } catch (Exception e) {
Log.wtf(TAG, "Failed to remove restricted user to owner", e); Log.wtf(TAG, "Failed to remove restricted user to owner", e);
} }
@@ -1887,7 +1896,12 @@ public class Vpn {
if (!isRunningLocked()) { if (!isRunningLocked()) {
return false; return false;
} }
return mNetworkCapabilities.appliesToUid(uid); final Set<Range<Integer>> uids = mNetworkCapabilities.getUids();
if (uids == null) return true;
for (final Range<Integer> range : uids) {
if (range.contains(uid)) return true;
}
return false;
} }
/** /**