TDLS: Do not reject TPK M3 when failing to process IEs
Some APs (Cisco) may tack on a weird IE to the end of the TDLS confirm packet, which can fail negotiation. As an interoperability workaround, ignore IE parser failures and reject the frame only if any of the mandatory IEs are not included. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
This commit is contained in:
parent
7efc7f66b1
commit
7e0f4f470a
1 changed files with 9 additions and 2 deletions
|
@ -2290,9 +2290,16 @@ static int wpa_tdls_process_tpk_m3(struct wpa_sm *sm, const u8 *src_addr,
|
|||
pos += 2 /* status code */ + 1 /* dialog token */;
|
||||
|
||||
ielen = len - (pos - buf); /* start of IE in buf */
|
||||
|
||||
/*
|
||||
* Don't reject the message if failing to parse IEs. The IEs we need are
|
||||
* explicitly checked below. Some APs piggy-back broken IEs to the end
|
||||
* of a TDLS Confirm packet, which will fail the link if we don't ignore
|
||||
* this error.
|
||||
*/
|
||||
if (wpa_supplicant_parse_ies((const u8 *) pos, ielen, &kde) < 0) {
|
||||
wpa_printf(MSG_INFO, "TDLS: Failed to parse KDEs in TPK M3");
|
||||
goto error;
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"TDLS: Failed to parse KDEs in TPK M3 - ignore as an interop workaround");
|
||||
}
|
||||
|
||||
if (kde.lnkid == NULL || kde.lnkid_len < 3 * ETH_ALEN) {
|
||||
|
|
Loading…
Reference in a new issue