diff options
| author | Dmitry Shmidt <dimitrysh@google.com> | 2013-11-22 12:54:42 -0800 |
|---|---|---|
| committer | Dmitry Shmidt <dimitrysh@google.com> | 2013-11-22 12:55:42 -0800 |
| commit | 292b0c3a742226c295f8db76eaef9e90c90e7513 (patch) | |
| tree | 79e39943535e44370c1df9618e7efd747e3ca5a2 /src/rsn_supp | |
| parent | 66395bb06dfb3c234a341194238042d79af459a6 (diff) | |
| download | android_external_wpa_supplicant_8-292b0c3a742226c295f8db76eaef9e90c90e7513.tar.gz android_external_wpa_supplicant_8-292b0c3a742226c295f8db76eaef9e90c90e7513.tar.bz2 android_external_wpa_supplicant_8-292b0c3a742226c295f8db76eaef9e90c90e7513.zip | |
Cumulative patch from commit a94737ea38a44ba7c8d4e48dd824c67a5b70bee3
a94737ea Android: P2P: Remember country locale
5e2c3490 Android: Add driver_cmd for arbitrary driver commands
0de38036 Android: Add P2P/WPS wrappers for private lib
92ecda40 hostapd: Set proper VHT capabilities
77a3e796 hostapd: Fix set beacon in multiple BSSID scenario
179fc552 TDLS: Do not reenable TDLS link on retransmitted setup frame
cc14091e VHT: Fix memory leak in STA entry
Change-Id: I38d0200c426d6f6671b8f2899b9236c4c135788a
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/rsn_supp')
| -rw-r--r-- | src/rsn_supp/tdls.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/src/rsn_supp/tdls.c b/src/rsn_supp/tdls.c index 616997f2..efc64313 100644 --- a/src/rsn_supp/tdls.c +++ b/src/rsn_supp/tdls.c @@ -1839,7 +1839,7 @@ static int wpa_tdls_process_tpk_m2(struct wpa_sm *sm, const u8 *src_addr, int ielen; u16 status; const u8 *pos; - int ret; + int ret = 0; wpa_printf(MSG_DEBUG, "TDLS: Received TDLS Setup Response / TPK M2 " "(Peer " MACSTR ")", MAC2STR(src_addr)); @@ -2056,11 +2056,19 @@ skip_rsn: return -1; } - ret = wpa_tdls_enable_link(sm, peer); - if (ret < 0) { - wpa_printf(MSG_DEBUG, "TDLS: Could not enable link"); - wpa_tdls_do_teardown(sm, peer, - WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED); + if (!peer->tpk_success) { + /* + * Enable Link only when tpk_success is 0, signifying that this + * processing of TPK M2 frame is not because of a retransmission + * during TDLS setup handshake. + */ + ret = wpa_tdls_enable_link(sm, peer); + if (ret < 0) { + wpa_printf(MSG_DEBUG, "TDLS: Could not enable link"); + wpa_tdls_do_teardown( + sm, peer, + WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED); + } } return ret; @@ -2084,7 +2092,7 @@ static int wpa_tdls_process_tpk_m3(struct wpa_sm *sm, const u8 *src_addr, u16 status; const u8 *pos; u32 lifetime; - int ret; + int ret = 0; wpa_printf(MSG_DEBUG, "TDLS: Received TDLS Setup Confirm / TPK M3 " "(Peer " MACSTR ")", MAC2STR(src_addr)); @@ -2201,11 +2209,19 @@ static int wpa_tdls_process_tpk_m3(struct wpa_sm *sm, const u8 *src_addr, } skip_rsn: - ret = wpa_tdls_enable_link(sm, peer); - if (ret < 0) { - wpa_printf(MSG_DEBUG, "TDLS: Could not enable link"); - wpa_tdls_do_teardown(sm, peer, - WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED); + if (!peer->tpk_success) { + /* + * Enable Link only when tpk_success is 0, signifying that this + * processing of TPK M3 frame is not because of a retransmission + * during TDLS setup handshake. + */ + ret = wpa_tdls_enable_link(sm, peer); + if (ret < 0) { + wpa_printf(MSG_DEBUG, "TDLS: Could not enable link"); + wpa_tdls_do_teardown( + sm, peer, + WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED); + } } return ret; error: @@ -2306,7 +2322,7 @@ void wpa_tdls_remove(struct wpa_sm *sm, const u8 *addr) * Disable previous link to allow renegotiation to be completed * on AP path. */ - wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr); + wpa_tdls_disable_peer_link(sm, peer); } } |
