]> asedeno.scripts.mit.edu Git - linux.git/commit
brcmfmac: drop Inter-Access Point Protocol packets by default
authorRafał Miłecki <rafal@milecki.pl>
Thu, 15 Mar 2018 07:29:09 +0000 (08:29 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 16 Mar 2018 13:00:24 +0000 (15:00 +0200)
commit1259055170287a350cad453e9eac139c81609860
tree505badf7018aa235f7cb759dd888471e9a5709bf
parent1e2dce98c03cedc81b4f1bfa6cd5850a86dcceb2
brcmfmac: drop Inter-Access Point Protocol packets by default

Testing brcmfmac with more recent firmwares resulted in AP interfaces
not working in some specific setups. Debugging resulted in discovering
support for IAPP in Broadcom's firmwares.

Older firmwares were only generating 802.11f frames. Newer ones like:
1) 10.10 (TOB) (r663589)
2) 10.10.122.20 (r683106)
for 4366b1 and 4366c0 respectively seem to also /respect/ 802.11f frames
in the Tx path by performing a STA disassociation.

This obsoleted standard and its implementation is something that:
1) Most people don't need / want to use
2) Can allow local DoS attacks
3) Breaks AP interfaces in some specific bridge setups

To solve issues it can cause this commit modifies brcmfmac to drop IAPP
packets. If affects:
1) Rx path: driver won't be sending these unwanted packets up.
2) Tx path: driver will reject packets that would trigger STA
   disassociation perfromed by a firmware (possible local DoS attack).

It appears there are some Broadcom's clients/users who care about this
feature despite the drawbacks. They can switch it on using a new module
param.

This change results in only two more comparisons (check for module param
and check for Ethernet packet length) for 99.9% of packets. Its overhead
should be very minimal.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c