summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java41
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,