From 4decf59c895a6cc09b4c5176b995185213acc388 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 15 Dec 2020 15:47:24 +0900 Subject: Stop using VPNs in getActiveNetworkForUidInternal. After this CL, ConnectivityService no longer needs to grab the VPN lock and access Vpn objects to determine connectivity state. Also make a synchronized (mVpns) block smaller. Bug: 173331190 Test: existing tests in ConnectivityServiceTest Change-Id: I3297b3ab8e75bdf4902c62dd7e492c3634cfc51f --- .../com/android/server/ConnectivityService.java | 48 ++++++++-------------- 1 file changed, 18 insertions(+), 30 deletions(-) (limited to 'services') diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 69f2457ed5de..d8dc93334d3c 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -28,7 +28,6 @@ import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_DNS import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS; import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_PACKET_FAIL_RATE; import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; -import static android.net.ConnectivityManager.NETID_UNSET; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_NONE; @@ -1444,31 +1443,20 @@ public class ConnectivityService extends IConnectivityManager.Stub } private Network getActiveNetworkForUidInternal(final int uid, boolean ignoreBlocked) { - final int user = UserHandle.getUserId(uid); - int vpnNetId = NETID_UNSET; - synchronized (mVpns) { - final Vpn vpn = mVpns.get(user); - // TODO : now that capabilities contain the UID, the appliesToUid test should - // be removed as the satisfying test below should be enough. - if (vpn != null && vpn.appliesToUid(uid)) vpnNetId = vpn.getNetId(); - } - NetworkAgentInfo nai; - if (vpnNetId != NETID_UNSET) { - nai = getNetworkAgentInfoForNetId(vpnNetId); - if (nai != null) { - final NetworkCapabilities requiredCaps = - createDefaultNetworkCapabilitiesForUid(uid); - if (requiredCaps.satisfiedByNetworkCapabilities(nai.networkCapabilities)) { - return nai.network; - } + final NetworkAgentInfo vpnNai = getVpnForUid(uid); + if (vpnNai != null) { + final NetworkCapabilities requiredCaps = createDefaultNetworkCapabilitiesForUid(uid); + if (requiredCaps.satisfiedByNetworkCapabilities(vpnNai.networkCapabilities)) { + return vpnNai.network; } } - nai = getDefaultNetwork(); - if (nai != null && isNetworkWithCapabilitiesBlocked( - nai.networkCapabilities, uid, ignoreBlocked)) { - nai = null; + + NetworkAgentInfo nai = getDefaultNetwork(); + if (nai == null || isNetworkWithCapabilitiesBlocked(nai.networkCapabilities, uid, + ignoreBlocked)) { + return null; } - return nai != null ? nai.network : null; + return nai.network; } // Public because it's used by mLockdownTracker. @@ -4814,15 +4802,15 @@ public class ConnectivityService extends IConnectivityManager.Stub if (mLockdownEnabled) { return new VpnInfo[0]; } - List infoList = new ArrayList<>(); - for (NetworkAgentInfo nai : mNetworkAgentInfos) { - VpnInfo info = createVpnInfo(nai); - if (info != null) { - infoList.add(info); - } + } + List infoList = new ArrayList<>(); + for (NetworkAgentInfo nai : mNetworkAgentInfos) { + VpnInfo info = createVpnInfo(nai); + if (info != null) { + infoList.add(info); } - return infoList.toArray(new VpnInfo[infoList.size()]); } + return infoList.toArray(new VpnInfo[infoList.size()]); } /** -- cgit v1.2.3-59-g8ed1b