From 4d2887b593aebf930d35b50976f91e22a9b61ce2 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Fri, 30 May 2025 14:27:34 +0900 Subject: [PATCH] Do not try to send updated allowed ranges for destroyed networks Test: TH Bug: 420229020 Flag: EXEMPT bugfix Change-Id: Ibc1c4cf2d94afe86f22b515ac0b91c85f6506f8e --- .../android/server/ConnectivityService.java | 1 + .../connectivityservice/CSPreferenceTest.kt | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 770e6fb043..ff95a378a8 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -11830,6 +11830,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } forEachNetworkAgentInfo(nai -> { + if (nai.isDestroyed()) return; // return@forEachNetworkAgentInfo ArraySet allowedUidRanges = new ArraySet<>(); for (final UserHandle user : users) { final ArraySet restrictedUidRanges = diff --git a/tests/unit/java/com/android/server/connectivityservice/CSPreferenceTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSPreferenceTest.kt index c8cd64e902..c455d9c085 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSPreferenceTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSPreferenceTest.kt @@ -21,9 +21,11 @@ import android.annotation.SuppressLint import android.content.pm.ApplicationInfo import android.net.ConnectivityManager import android.net.ConnectivityManager.NetworkCallback +import android.net.ConnectivityManager.PROFILE_NETWORK_PREFERENCE_ENTERPRISE import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED +import android.net.NetworkCapabilities.NET_ENTERPRISE_ID_1 import android.net.NetworkCapabilities.TRANSPORT_SATELLITE import android.net.NetworkCapabilities.TRANSPORT_TEST import android.net.NetworkCapabilities.TRANSPORT_WIFI @@ -31,6 +33,7 @@ import android.net.NetworkProvider import android.net.NetworkScore import android.net.OemNetworkPreferences import android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_TEST +import android.net.ProfileNetworkPreference import android.os.Build import android.os.ConditionVariable import android.os.Handler @@ -41,6 +44,7 @@ import androidx.test.filters.SmallTest import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo import com.android.testutils.DevSdkIgnoreRunner +import com.android.testutils.TestableNetworkAgent.Event.OnNetworkDestroyed import com.android.testutils.TestableNetworkCallback import com.android.testutils.TestableNetworkCallback.Event.Lost import com.android.testutils.TestableNetworkOfferCallback @@ -52,9 +56,15 @@ import kotlin.test.assertEquals import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.argThat import org.mockito.Mockito.any import org.mockito.Mockito.doAnswer +import org.mockito.Mockito.doReturn import org.mockito.Mockito.eq +import org.mockito.Mockito.inOrder +import org.mockito.Mockito.never +import org.mockito.Mockito.times +import org.mockito.Mockito.verify const val UID1 = 184 const val UID2 = 10184 @@ -385,4 +395,35 @@ class CSPreferenceTest : CSTest() { satelliteCallback.assertNoCallback() restrictedSatelliteCallback.assertNoCallback() } + + // Netd#setNetworkAllowlist was implemented in U. + @Test @IgnoreUpTo(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + fun testPreferenceWithUnregisterAfterReplacement() { + val netdCalls = inOrder(netd) + val user = UserHandle.getUserHandleForUid(Process.myUid()) + doReturn(true).`when`(userManager).isManagedProfile(user.identifier) + + val wifiAgent = Agent(nc(TRANSPORT_WIFI, NET_CAPABILITY_INTERNET)) + wifiAgent.connect() + netdCalls.verify(netd).setNetworkAllowlist(argThat { allowList -> + allowList.any { it.netId == wifiAgent.network.netId } + }) + wifiAgent.unregisterAfterReplacement(DEFAULT_TIMEOUT_MS.toInt()) + wifiAgent.eventuallyExpect() + + val pref = ProfileNetworkPreference.Builder() + .setPreference(PROFILE_NETWORK_PREFERENCE_ENTERPRISE) + .setPreferenceEnterpriseId(NET_ENTERPRISE_ID_1) + .setIncludedUids(intArrayOf(Process.myUid())) + .build() + val cv = ConditionVariable() + cm.setProfileNetworkPreferences(user, listOf(pref), Runnable::run) { + cv.open() + } + cv.block() + + netdCalls.verify(netd, never()).setNetworkAllowlist(argThat { allowList -> + allowList.any { it.netId == wifiAgent.network.netId } + }) + } }