All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kalle Valo <kvalo@codeaurora.org>
To: "Rafał Miłecki" <zajec5@gmail.com>
Cc: "James Hughes" <james.hughes@raspberrypi.org>,
	"Arend van Spriel" <arend.vanspriel@broadcom.com>,
	netdev@vger.kernel.org,
	"Chi-Hsien Lin" <chi-hsien.lin@cypress.com>,
	bridge@lists.linux-foundation.org,
	linux-wireless@vger.kernel.org,
	"Hante Meuleman" <hante.meuleman@broadcom.com>,
	"Pieter-Paul Giesberts" <pieter-paul.giesberts@broadcom.com>,
	brcm80211-dev-list.pdl@broadcom.com,
	"Wright Feng" <wright.feng@cypress.com>,
	"Rafał Miłecki" <rafal@milecki.pl>,
	"Felix Fietkau" <nbd@nbd.name>,
	brcm80211-dev-list@cypress.com,
	"Franky Lin" <franky.lin@broadcom.com>
Subject: Re: [Bridge] [PATCH] brcmfmac: drop Inter-Access Point Protocol packets by default
Date: Wed, 14 Mar 2018 14:24:13 -0000	[thread overview]
Message-ID: <878tau7n23.fsf@codeaurora.org> (raw)
In-Reply-To: <20180314110119.13631-1-zajec5@gmail.com> ("Rafał Miłecki"'s message of "Wed, 14 Mar 2018 12:01:19 +0100")

Rafał Miłecki <zajec5@gmail.com> writes:

> From: Rafał Miłecki <rafal@milecki.pl>
>
> 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. This is an 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 by a newly added
> Kconfig option.
>
> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>

[...]

> --- a/drivers/net/wireless/broadcom/brcm80211/Kconfig
> +++ b/drivers/net/wireless/broadcom/brcm80211/Kconfig
> @@ -68,6 +68,26 @@ config BRCMFMAC_PCIE
>  	  IEEE802.11ac embedded FullMAC WLAN driver. Say Y if you want to
>  	  use the driver for an PCIE wireless card.
>  
> +config BRCMFMAC_IAPP
> +	bool "Partial support for obsoleted Inter-Access Point Protocol"
> +	depends on BRCMFMAC
> +	---help---
> +	  Most of Broadcom's firmwares can send 802.11f ADD frame every
> +	  time new STA connects to the AP interface. Some recent ones
> +	  can also disassociate STA when they receive such a frame.
> +
> +	  It's important to understand this behavior can lead to a local
> +	  DoS security issue. Attacker may trigger disassociation of any
> +	  STA by sending a proper Ethernet frame to the wireless
> +	  interface.
> +
> +	  Moreover this feature may break AP interfaces in some specific
> +	  setups. This applies e.g. to the bridge with hairpin mode
> +	  enabled and IFLA_BRPORT_MCAST_TO_UCAST set. IAPP packet
> +	  generated by a firmware will get passed back to the wireless
> +	  interface and cause immediate disassociation of just-connected
> +	  STA.

Sorry for jumping late, but does it really make sense to have a Kconfig
option for this? I don't think we should add a Kconfig option for every
strange feature, there should be stronger reasons (size savings etc)
before adding a Kconfig option.

And in this case the size savings can't be much. Wouldn't a module
parameter be simpler for a functionality change like this?

> +/**
> + * brcmf_skb_is_iapp - checks if skb is an IAPP packet
> + *
> + * @skb: skb to check
> + */
> +static bool brcmf_skb_is_iapp(struct sk_buff *skb)
> +{
> +	const u8 iapp_l2_update_packet[6] __aligned(2) = {
> +		0x00, 0x01, 0xaf, 0x81, 0x01, 0x00,
> +	};

static?

> +	unsigned char *eth_data = skb_mac_header(skb) + ETH_HLEN;
> +#if !defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)

#ifndef?

> +	const u16 *a = (const u16 *)eth_data;
> +	const u16 *b = (const u16 *)iapp_l2_update_packet;
> +#endif
> +
> +	if (skb->len - skb->mac_len != 6 ||
> +	    !is_multicast_ether_addr(eth_hdr(skb)->h_dest))
> +		return false;
> +
> +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)

#ifdef?

-- 
Kalle Valo

WARNING: multiple messages have this Message-ID (diff)
From: Kalle Valo <kvalo@codeaurora.org>
To: "Rafał Miłecki" <zajec5@gmail.com>
Cc: "Arend van Spriel" <arend.vanspriel@broadcom.com>,
	"Franky Lin" <franky.lin@broadcom.com>,
	"Hante Meuleman" <hante.meuleman@broadcom.com>,
	"Chi-Hsien Lin" <chi-hsien.lin@cypress.com>,
	"Wright Feng" <wright.feng@cypress.com>,
	"Pieter-Paul Giesberts" <pieter-paul.giesberts@broadcom.com>,
	"James Hughes" <james.hughes@raspberrypi.org>,
	linux-wireless@vger.kernel.org,
	brcm80211-dev-list.pdl@broadcom.com,
	brcm80211-dev-list@cypress.com, netdev@vger.kernel.org,
	"Linus Lüssing" <linus.luessing@c0d3.blue>,
	"Felix Fietkau" <nbd@nbd.name>,
	bridge@lists.linux-foundation.org,
	"Rafał Miłecki" <rafal@milecki.pl>
Subject: Re: [PATCH] brcmfmac: drop Inter-Access Point Protocol packets by default
Date: Wed, 14 Mar 2018 16:24:04 +0200	[thread overview]
Message-ID: <878tau7n23.fsf@codeaurora.org> (raw)
In-Reply-To: <20180314110119.13631-1-zajec5@gmail.com> ("Rafał Miłecki"'s message of "Wed, 14 Mar 2018 12:01:19 +0100")

Rafa=C5=82 Mi=C5=82ecki <zajec5@gmail.com> writes:

> From: Rafa=C5=82 Mi=C5=82ecki <rafal@milecki.pl>
>
> 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. This is an 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 by a newly added
> Kconfig option.
>
> Signed-off-by: Rafa=C5=82 Mi=C5=82ecki <rafal@milecki.pl>

[...]

> --- a/drivers/net/wireless/broadcom/brcm80211/Kconfig
> +++ b/drivers/net/wireless/broadcom/brcm80211/Kconfig
> @@ -68,6 +68,26 @@ config BRCMFMAC_PCIE
>  	  IEEE802.11ac embedded FullMAC WLAN driver. Say Y if you want to
>  	  use the driver for an PCIE wireless card.
>=20=20
> +config BRCMFMAC_IAPP
> +	bool "Partial support for obsoleted Inter-Access Point Protocol"
> +	depends on BRCMFMAC
> +	---help---
> +	  Most of Broadcom's firmwares can send 802.11f ADD frame every
> +	  time new STA connects to the AP interface. Some recent ones
> +	  can also disassociate STA when they receive such a frame.
> +
> +	  It's important to understand this behavior can lead to a local
> +	  DoS security issue. Attacker may trigger disassociation of any
> +	  STA by sending a proper Ethernet frame to the wireless
> +	  interface.
> +
> +	  Moreover this feature may break AP interfaces in some specific
> +	  setups. This applies e.g. to the bridge with hairpin mode
> +	  enabled and IFLA_BRPORT_MCAST_TO_UCAST set. IAPP packet
> +	  generated by a firmware will get passed back to the wireless
> +	  interface and cause immediate disassociation of just-connected
> +	  STA.

Sorry for jumping late, but does it really make sense to have a Kconfig
option for this? I don't think we should add a Kconfig option for every
strange feature, there should be stronger reasons (size savings etc)
before adding a Kconfig option.

And in this case the size savings can't be much. Wouldn't a module
parameter be simpler for a functionality change like this?

> +/**
> + * brcmf_skb_is_iapp - checks if skb is an IAPP packet
> + *
> + * @skb: skb to check
> + */
> +static bool brcmf_skb_is_iapp(struct sk_buff *skb)
> +{
> +	const u8 iapp_l2_update_packet[6] __aligned(2) =3D {
> +		0x00, 0x01, 0xaf, 0x81, 0x01, 0x00,
> +	};

static?

> +	unsigned char *eth_data =3D skb_mac_header(skb) + ETH_HLEN;
> +#if !defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)

#ifndef?

> +	const u16 *a =3D (const u16 *)eth_data;
> +	const u16 *b =3D (const u16 *)iapp_l2_update_packet;
> +#endif
> +
> +	if (skb->len - skb->mac_len !=3D 6 ||
> +	    !is_multicast_ether_addr(eth_hdr(skb)->h_dest))
> +		return false;
> +
> +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)

#ifdef?

--=20
Kalle Valo

WARNING: multiple messages have this Message-ID (diff)
From: Kalle Valo <kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
To: "Rafał Miłecki" <zajec5-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: "Arend van Spriel"
	<arend.vanspriel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
	"Franky Lin" <franky.lin-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
	"Hante Meuleman"
	<hante.meuleman-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
	"Chi-Hsien Lin"
	<chi-hsien.lin-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org>,
	"Wright Feng"
	<wright.feng-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org>,
	"Pieter-Paul Giesberts"
	<pieter-paul.giesberts-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
	"James Hughes"
	<james.hughes-FnsA7b+Nu9XbIbC87yuRow@public.gmane.org>,
	linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	brcm80211-dev-list.pdl-dY08KVG/lbpWk0Htik3J/w@public.gmane.org,
	brcm80211-dev-list-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org,
	netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	"Linus Lüssing"
	<linus.luessing-djzkFPsfvsizQB+pC5nmwQ@public.gmane.org>,
	"Felix Fietkau" <nbd-Vt+b4OUoWG0@public.gmane.org>,
	bridge-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	"Rafał Miłecki" <rafal-g1n6cQUeyibVItvQsEIGlw@public.gmane.org>
Subject: Re: [PATCH] brcmfmac: drop Inter-Access Point Protocol packets by default
Date: Wed, 14 Mar 2018 16:24:04 +0200	[thread overview]
Message-ID: <878tau7n23.fsf@codeaurora.org> (raw)
In-Reply-To: <20180314110119.13631-1-zajec5-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> ("Rafał Miłecki"'s message of "Wed, 14 Mar 2018 12:01:19 +0100")

Rafał Miłecki <zajec5-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes:

> From: Rafał Miłecki <rafal-g1n6cQUeyibVItvQsEIGlw@public.gmane.org>
>
> 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. This is an 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 by a newly added
> Kconfig option.
>
> Signed-off-by: Rafał Miłecki <rafal-g1n6cQUeyibVItvQsEIGlw@public.gmane.org>

[...]

> --- a/drivers/net/wireless/broadcom/brcm80211/Kconfig
> +++ b/drivers/net/wireless/broadcom/brcm80211/Kconfig
> @@ -68,6 +68,26 @@ config BRCMFMAC_PCIE
>  	  IEEE802.11ac embedded FullMAC WLAN driver. Say Y if you want to
>  	  use the driver for an PCIE wireless card.
>  
> +config BRCMFMAC_IAPP
> +	bool "Partial support for obsoleted Inter-Access Point Protocol"
> +	depends on BRCMFMAC
> +	---help---
> +	  Most of Broadcom's firmwares can send 802.11f ADD frame every
> +	  time new STA connects to the AP interface. Some recent ones
> +	  can also disassociate STA when they receive such a frame.
> +
> +	  It's important to understand this behavior can lead to a local
> +	  DoS security issue. Attacker may trigger disassociation of any
> +	  STA by sending a proper Ethernet frame to the wireless
> +	  interface.
> +
> +	  Moreover this feature may break AP interfaces in some specific
> +	  setups. This applies e.g. to the bridge with hairpin mode
> +	  enabled and IFLA_BRPORT_MCAST_TO_UCAST set. IAPP packet
> +	  generated by a firmware will get passed back to the wireless
> +	  interface and cause immediate disassociation of just-connected
> +	  STA.

Sorry for jumping late, but does it really make sense to have a Kconfig
option for this? I don't think we should add a Kconfig option for every
strange feature, there should be stronger reasons (size savings etc)
before adding a Kconfig option.

And in this case the size savings can't be much. Wouldn't a module
parameter be simpler for a functionality change like this?

> +/**
> + * brcmf_skb_is_iapp - checks if skb is an IAPP packet
> + *
> + * @skb: skb to check
> + */
> +static bool brcmf_skb_is_iapp(struct sk_buff *skb)
> +{
> +	const u8 iapp_l2_update_packet[6] __aligned(2) = {
> +		0x00, 0x01, 0xaf, 0x81, 0x01, 0x00,
> +	};

static?

> +	unsigned char *eth_data = skb_mac_header(skb) + ETH_HLEN;
> +#if !defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)

#ifndef?

> +	const u16 *a = (const u16 *)eth_data;
> +	const u16 *b = (const u16 *)iapp_l2_update_packet;
> +#endif
> +
> +	if (skb->len - skb->mac_len != 6 ||
> +	    !is_multicast_ether_addr(eth_hdr(skb)->h_dest))
> +		return false;
> +
> +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)

#ifdef?

-- 
Kalle Valo

  parent reply	other threads:[~2018-03-14 14:24 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-14 11:01 [PATCH] brcmfmac: drop Inter-Access Point Protocol packets by default Rafał Miłecki
2018-03-14 11:01 ` [Bridge] " Rafał Miłecki
2018-03-14 11:01 ` Rafał Miłecki
2018-03-14 12:58 ` Arend van Spriel
2018-03-14 12:58   ` [Bridge] " Arend van Spriel
2018-03-14 12:58   ` Arend van Spriel
2018-03-14 15:39   ` Rafał Miłecki
2018-03-14 16:58     ` [Bridge] " Rafał Miłecki
2018-03-14 15:39     ` Rafał Miłecki
2018-03-14 15:40     ` Rafał Miłecki
2018-03-14 15:58       ` [Bridge] " Rafał Miłecki
2018-03-14 15:40       ` Rafał Miłecki
2018-03-14 15:57     ` Rafał Miłecki
2018-03-14 20:43       ` [Bridge] " Rafał Miłecki
2018-03-14 15:57       ` Rafał Miłecki
2018-03-14 20:44       ` Arend van Spriel
2018-03-14 20:44         ` [Bridge] " Arend van Spriel
2018-03-14 20:44         ` Arend van Spriel
2018-03-14 14:24 ` Kalle Valo [this message]
2018-03-14 14:24   ` [Bridge] " Kalle Valo
2018-03-14 14:24   ` Kalle Valo
2018-03-14 14:44   ` Arend van Spriel
2018-03-14 14:44     ` [Bridge] " Arend van Spriel
2018-03-14 14:44     ` Arend van Spriel
2018-03-14 15:08     ` Kalle Valo
2018-03-14 15:08       ` [Bridge] " Kalle Valo
2018-03-14 15:08       ` Kalle Valo
2018-03-14 15:27       ` [Bridge] " Stephen Hemminger
2018-03-14 15:27         ` Stephen Hemminger
2018-03-14 15:27         ` Stephen Hemminger
2018-03-14 15:28       ` Rafał Miłecki
2018-03-14 17:57         ` [Bridge] " Rafał Miłecki
2018-03-14 15:28         ` Rafał Miłecki
2018-03-14 15:44   ` Rafał Miłecki
2018-03-14 15:45     ` [Bridge] " Rafał Miłecki
2018-03-14 15:44     ` Rafał Miłecki
2018-03-14 16:10     ` Kalle Valo
2018-03-14 16:10       ` [Bridge] " Kalle Valo
2018-03-14 16:10       ` Kalle Valo
2018-03-14 20:55       ` Arend van Spriel
2018-03-14 20:55         ` [Bridge] " Arend van Spriel
2018-03-14 20:55         ` Arend van Spriel
2018-03-15  9:23         ` Kalle Valo
2018-03-15  9:23           ` [Bridge] " Kalle Valo
2018-03-15  9:23           ` Kalle Valo
2018-03-14 15:08 ` [Bridge] " Stephen Hemminger
2018-03-14 15:08   ` Stephen Hemminger
2018-03-14 15:08   ` Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878tau7n23.fsf@codeaurora.org \
    --to=kvalo@codeaurora.org \
    --cc=arend.vanspriel@broadcom.com \
    --cc=brcm80211-dev-list.pdl@broadcom.com \
    --cc=brcm80211-dev-list@cypress.com \
    --cc=bridge@lists.linux-foundation.org \
    --cc=chi-hsien.lin@cypress.com \
    --cc=franky.lin@broadcom.com \
    --cc=hante.meuleman@broadcom.com \
    --cc=james.hughes@raspberrypi.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=nbd@nbd.name \
    --cc=netdev@vger.kernel.org \
    --cc=pieter-paul.giesberts@broadcom.com \
    --cc=rafal@milecki.pl \
    --cc=wright.feng@cypress.com \
    --cc=zajec5@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.