summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2020-07-24 20:25:09 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-07-24 20:25:09 +0000
commit0e616e9c60365e8787fd5b1296583619cbebddba (patch)
tree12aa99a55822ea9c37caa63b599163f64af26039 /service
parentd0d4174382286ef11195c9fd7705607f2c12fde0 (diff)
parentcc841d2abc81491a4001fe1c46e9ea17fb01581e (diff)
Merge "SupplicantStaIfaceHal: Trigger EAP auth failure on disconnect" into rvc-qpr-dev
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java35
1 files changed, 24 insertions, 11 deletions
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java
index 92ba43b4c..9d69003cf 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java
@@ -55,7 +55,8 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
private final String mIfaceName;
private final Object mLock;
private final WifiMonitor mWifiMonitor;
- private boolean mStateIsFourway = false; // Used to help check for PSK password mismatch
+ // Used to help check for PSK password mismatch & EAP connection failure.
+ private int mStateBeforeDisconnect = State.INACTIVE;
SupplicantStaIfaceCallbackImpl(@NonNull SupplicantStaIfaceHal staIfaceHal,
@NonNull String ifaceName,
@@ -151,8 +152,8 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
public void onNetworkRemoved(int id) {
synchronized (mLock) {
mStaIfaceHal.logCallback("onNetworkRemoved");
- // Reset 4way handshake state since network has been removed.
- mStateIsFourway = false;
+ // Reset state since network has been removed.
+ mStateBeforeDisconnect = State.INACTIVE;
}
}
@@ -166,8 +167,12 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
WifiSsid wifiSsid =
WifiSsid.createFromByteArray(NativeUtil.byteArrayFromArrayList(ssid));
String bssidStr = NativeUtil.macAddressFromByteArray(bssid);
- mStateIsFourway = (newState == ISupplicantStaIfaceCallback.State.FOURWAY_HANDSHAKE);
- if (newSupplicantState == SupplicantState.COMPLETED) {
+ if (newState != State.DISCONNECTED) {
+ // onStateChanged(DISCONNECTED) may come before onDisconnected(), so add this
+ // cache to track the state before the disconnect.
+ mStateBeforeDisconnect = newState;
+ }
+ if (newState == State.COMPLETED) {
mWifiMonitor.broadcastNetworkConnectionEvent(
mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr);
}
@@ -239,14 +244,23 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
synchronized (mLock) {
mStaIfaceHal.logCallback("onDisconnected");
if (mStaIfaceHal.isVerboseLoggingEnabled()) {
- Log.e(TAG, "onDisconnected 4way=" + mStateIsFourway
+ Log.e(TAG, "onDisconnected state=" + mStateBeforeDisconnect
+ " locallyGenerated=" + locallyGenerated
+ " reasonCode=" + reasonCode);
}
- if (mStateIsFourway
- && (!locallyGenerated || reasonCode != ReasonCode.IE_IN_4WAY_DIFFERS)) {
- mWifiMonitor.broadcastAuthenticationFailureEvent(
- mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1);
+ WifiConfiguration curConfiguration =
+ mStaIfaceHal.getCurrentNetworkLocalConfig(mIfaceName);
+ if (curConfiguration != null) {
+ if (mStateBeforeDisconnect == State.FOURWAY_HANDSHAKE
+ && WifiConfigurationUtil.isConfigForPskNetwork(curConfiguration)
+ && (!locallyGenerated || reasonCode != ReasonCode.IE_IN_4WAY_DIFFERS)) {
+ mWifiMonitor.broadcastAuthenticationFailureEvent(
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1);
+ } else if (mStateBeforeDisconnect == State.ASSOCIATED
+ && WifiConfigurationUtil.isConfigForEapNetwork(curConfiguration)) {
+ mWifiMonitor.broadcastAuthenticationFailureEvent(
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_EAP_FAILURE, -1);
+ }
}
mWifiMonitor.broadcastNetworkDisconnectionEvent(
mIfaceName, locallyGenerated ? 1 : 0, reasonCode,
@@ -261,7 +275,6 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
boolean isWrongPwd = false;
WifiConfiguration curConfiguration =
mStaIfaceHal.getCurrentNetworkLocalConfig(mIfaceName);
-
if (curConfiguration != null) {
if (!timedOut) {
Log.d(TAG, "flush PMK cache due to association rejection for config id "