diff options
author | 2023-04-04 22:00:30 +0000 | |
---|---|---|
committer | 2023-04-04 22:00:30 +0000 | |
commit | fc3926683b26c077ca05906ffe6685e092667ccf (patch) | |
tree | 0c8262311334957fcb26d5dd71354466ba39fec6 | |
parent | 7b4732fdd8be5600ce05ede5852664a2ec00af6f (diff) | |
parent | f1f03b5f202a76c375d2c41a01d92fda20c62ff7 (diff) |
Merge "Flush the PMK cache if credential is changed" into udc-dev
4 files changed, 20 insertions, 10 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index c6b0e83a7d..ae6fcb2b29 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -1201,10 +1201,10 @@ public class ClientModeImpl extends StateMachine implements ClientMode { @Override public void onNetworkUpdated(WifiConfiguration newConfig, WifiConfiguration oldConfig) { - // Clear invalid cached data. - mWifiNative.removeNetworkCachedData(oldConfig.networkId); if (WifiConfigurationUtil.hasCredentialChanged(oldConfig, newConfig)) { + // Clear invalid cached data. + mWifiNative.removeNetworkCachedData(oldConfig.networkId); mWifiBlocklistMonitor.handleNetworkRemoved(newConfig.SSID); } diff --git a/service/java/com/android/server/wifi/WifiConfigurationUtil.java b/service/java/com/android/server/wifi/WifiConfigurationUtil.java index c4d19ca1eb..226b80f4ca 100644 --- a/service/java/com/android/server/wifi/WifiConfigurationUtil.java +++ b/service/java/com/android/server/wifi/WifiConfigurationUtil.java @@ -279,8 +279,13 @@ public class WifiConfigurationUtil { return true; } if (existingEnterpriseConfig.isAuthenticationSimBased()) { - // The anonymous identity will be decorated with 3gpp realm in the service. - if (!TextUtils.equals(existingEnterpriseConfig.getAnonymousIdentity(), + // On Pre-T devices consider it as a credential change so that the network + // configuration is reloaded in wpa_supplicant during reconnection. This is to + // ensure that the updated anonymous identity is sent to wpa_supplicant. On newer + // releases the anonymous identity is updated immediately after connection + // completion event. + if (!SdkLevel.isAtLeastT() + && !TextUtils.equals(existingEnterpriseConfig.getAnonymousIdentity(), newEnterpriseConfig.getAnonymousIdentity())) { return true; } diff --git a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index a34f3161b4..5a2dae6a87 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -6871,12 +6871,13 @@ public class ClientModeImplTest extends WifiBaseTest { } /** - * Verify that network cached data is cleared on updating a network. + * Verify that network cached data is cleared on changing the credential. */ @Test - public void testNetworkCachedDataIsClearedOnUpdatingNetwork() throws Exception { + public void testNetworkCachedDataIsClearedOnChangingTheCredential() throws Exception { + mConnectedNetwork = spy(WifiConfigurationTestUtil.createPasspointNetwork()); WifiConfiguration oldConfig = new WifiConfiguration(mConnectedNetwork); - mConnectedNetwork.meteredOverride = METERED_OVERRIDE_METERED; + mConnectedNetwork.enterpriseConfig.setPassword("fakePassword"); for (WifiConfigManager.OnNetworkUpdateListener listener : mConfigUpdateListenerCaptor .getAllValues()) { diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java index 102f704831..08fce8cec1 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java @@ -956,18 +956,22 @@ public class WifiConfigurationUtilTest extends WifiBaseTest { } /** - * Verify that WifiConfigurationUtil.isSameNetwork returns false when two WifiConfiguration + * Verify WifiConfigurationUtil.isSameNetwork return vale when two WifiConfiguration * objects have the different EAP anonymous(pseudonym) identity in EAP-SIM. */ @Test - public void testIsSameNetworkReturnsFalseOnDifferentEapAnonymousIdentityInEapSim() { + public void testIsSameNetworkReturnValueOnDifferentEapAnonymousIdentityInEapSim() { WifiConfiguration network1 = WifiConfigurationTestUtil.createEapNetwork(TEST_SSID); WifiConfiguration network2 = WifiConfigurationTestUtil.createEapNetwork(TEST_SSID); network1.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM); network2.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM); network1.enterpriseConfig.setAnonymousIdentity("Identity1"); network2.enterpriseConfig.setAnonymousIdentity("Identity2"); - assertFalse(WifiConfigurationUtil.isSameNetwork(network1, network2)); + if (SdkLevel.isAtLeastT()) { + assertTrue(WifiConfigurationUtil.isSameNetwork(network1, network2)); + } else { + assertFalse(WifiConfigurationUtil.isSameNetwork(network1, network2)); + } } /** |