diff options
author | Roshan Pius <rpius@google.com> | 2020-07-24 20:25:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-07-24 20:25:09 +0000 |
commit | 0e616e9c60365e8787fd5b1296583619cbebddba (patch) | |
tree | 12aa99a55822ea9c37caa63b599163f64af26039 /service | |
parent | d0d4174382286ef11195c9fd7705607f2c12fde0 (diff) | |
parent | cc841d2abc81491a4001fe1c46e9ea17fb01581e (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.java | 35 |
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 " |