mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 13:02:44 +01:00
frame-xchg: Drop the BSSID check for incoming frames
The BSSID (address_3) in response frames was being checked to be the same as in the request frame, or all-zeros for faulty drivers. At least one Wi-Fi Display device sends a GO Negotiation Response with the BSSID different from its Device Address (by 1 bit) and I didn't see an easy way to obtain that address beforhand so we can "whitelist" it for this check, so just drop that check for now. ANQP didn't have this check before it started using frame-xchg so it shouldn't be critical.
This commit is contained in:
parent
5600c736b8
commit
40c091ac7f
@ -992,14 +992,11 @@ static bool frame_xchg_resp_handle(const struct mmpdu_header *mpdu,
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Is the received frame's BSSID same as the transmitted frame's
|
||||
* BSSID, may have to be moved to the user callback if there are
|
||||
* usages where this is false. Some drivers (brcmfmac) can't
|
||||
* report the BSSID so check for all-zeros too.
|
||||
* BSSID (address_3) check not practical because some Linux
|
||||
* drivers report all-zero values and some remote devices send
|
||||
* wrong addresses. But the frame callback is free to perform
|
||||
* its own check.
|
||||
*/
|
||||
if (memcmp(mpdu->address_3, fx->tx_mpdu->address_3, 6) &&
|
||||
!util_mem_is_zero(mpdu->address_3, 6))
|
||||
return false;
|
||||
|
||||
for (entry = l_queue_get_entries(fx->rx_watches);
|
||||
entry; entry = entry->next) {
|
||||
|
Loading…
Reference in New Issue
Block a user