diff options
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java index 2d78514e4..92ba43b4c 100644 --- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java +++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java @@ -258,29 +258,36 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac public void onAssociationRejected(byte[/* 6 */] bssid, int statusCode, boolean timedOut) { synchronized (mLock) { mStaIfaceHal.logCallback("onAssociationRejected"); + boolean isWrongPwd = false; WifiConfiguration curConfiguration = mStaIfaceHal.getCurrentNetworkLocalConfig(mIfaceName); - if (curConfiguration != null && !timedOut) { - Log.d(TAG, "flush PMK cache due to association rejection for config id " - + curConfiguration.networkId + "."); - mStaIfaceHal.removePmkCacheEntry(curConfiguration.networkId); - } - - if (statusCode == StatusCode.UNSPECIFIED_FAILURE) { - if (curConfiguration != null - && curConfiguration.allowedKeyManagement - .get(WifiConfiguration.KeyMgmt.SAE)) { - // Special handling for WPA3-Personal networks. If the password is - // incorrect, the AP will send association rejection, with status code 1 - // (unspecified failure). In SAE networks, the password authentication - // is not related to the 4-way handshake. In this case, we will send an - // authentication failure event up. + if (curConfiguration != null) { + if (!timedOut) { + Log.d(TAG, "flush PMK cache due to association rejection for config id " + + curConfiguration.networkId + "."); + mStaIfaceHal.removePmkCacheEntry(curConfiguration.networkId); + } + // Special handling for WPA3-Personal networks. If the password is + // incorrect, the AP will send association rejection, with status code 1 + // (unspecified failure). In SAE networks, the password authentication + // is not related to the 4-way handshake. In this case, we will send an + // authentication failure event up. + if (statusCode == StatusCode.UNSPECIFIED_FAILURE + && WifiConfigurationUtil.isConfigForSaeNetwork(curConfiguration)) { mStaIfaceHal.logCallback("SAE incorrect password"); - mWifiMonitor.broadcastAuthenticationFailureEvent( - mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1); + isWrongPwd = true; + } else if (statusCode == StatusCode.CHALLENGE_FAIL + && WifiConfigurationUtil.isConfigForWepNetwork(curConfiguration)) { + mStaIfaceHal.logCallback("WEP incorrect password"); + isWrongPwd = true; } } + + if (isWrongPwd) { + mWifiMonitor.broadcastAuthenticationFailureEvent( + mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1); + } mWifiMonitor .broadcastAssociationRejectionEvent( mIfaceName, statusCode, timedOut, |