linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx()
@ 2017-07-07 12:01 Arend van Spriel
  2017-07-07 12:47 ` Sedat Dilek
  2017-07-07 13:17 ` Johannes Berg
  0 siblings, 2 replies; 6+ messages in thread
From: Arend van Spriel @ 2017-07-07 12:01 UTC (permalink / raw)
  To: Kalle Valo; +Cc: Linus Torvalds, linux-wireless, Arend van Spriel

The lower level nl80211 code in cfg80211 ensures that "len" is between
25 and NL80211_ATTR_FRAME (2304).  We subtract DOT11_MGMT_HDR_LEN (24) from
"len" so thats's max of 2280.  However, the action_frame->data[] buffer is
only BRCMF_FIL_ACTION_FRAME_SIZE (1800) bytes long so this memcpy() can
overflow.

	memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
	       le16_to_cpu(action_frame->len));

Reported-by: "freenerguo(郭大兴)" <freenerguo@tencent.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
Hi Kalle,

Here is the patch as Linus send it to us and security@kernel.org. I
removed the lower bound check as that is already done in cfg80211.
Now I signed off on the patch although formally I suppose Linus should
sign it off. Putting it out there so people can respond as deemed
necessary.

Now fingers crossed whether patchwork will properly deal with the UTF-8
characters :-p

Regards,
Arend
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index cd1d673..d182a00 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -4851,6 +4851,11 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
 		cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, true,
 					GFP_KERNEL);
 	} else if (ieee80211_is_action(mgmt->frame_control)) {
+		if (len > BRCMF_FIL_ACTION_FRAME_SIZE + DOT11_MGMT_HDR_LEN) {
+			brcmf_err("invalid action frame length\n");
+			err = -EINVAL;
+			goto exit;
+		}
 		af_params = kzalloc(sizeof(*af_params), GFP_KERNEL);
 		if (af_params == NULL) {
 			brcmf_err("unable to allocate frame\n");
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx()
  2017-07-07 12:01 [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx() Arend van Spriel
@ 2017-07-07 12:47 ` Sedat Dilek
  2017-07-07 19:39   ` Arend van Spriel
  2017-07-07 13:17 ` Johannes Berg
  1 sibling, 1 reply; 6+ messages in thread
From: Sedat Dilek @ 2017-07-07 12:47 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: Kalle Valo, Linus Torvalds, linux-wireless

On Fri, Jul 7, 2017 at 2:01 PM, Arend van Spriel
<arend.vanspriel@broadcom.com> wrote:
> The lower level nl80211 code in cfg80211 ensures that "len" is between
> 25 and NL80211_ATTR_FRAME (2304).  We subtract DOT11_MGMT_HDR_LEN (24) fr=
om
> "len" so thats's max of 2280.  However, the action_frame->data[] buffer i=
s
> only BRCMF_FIL_ACTION_FRAME_SIZE (1800) bytes long so this memcpy() can
> overflow.
>
>         memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
>                le16_to_cpu(action_frame->len));
>
> Reported-by: "freenerguo(=E9=83=AD=E5=A4=A7=E5=85=B4)" <freenerguo@tencen=
t.com>
> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> ---
> Hi Kalle,
>
> Here is the patch as Linus send it to us and security@kernel.org. I
> removed the lower bound check as that is already done in cfg80211.
> Now I signed off on the patch although formally I suppose Linus should
> sign it off. Putting it out there so people can respond as deemed
> necessary.
>
> Now fingers crossed whether patchwork will properly deal with the UTF-8
> characters :-p
>

Somehow horrific to see - less in usage (no CC here).

- Sedat -

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/=
?qt=3Dgrep&q=3Dsecurity%40kernel.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx()
  2017-07-07 12:01 [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx() Arend van Spriel
  2017-07-07 12:47 ` Sedat Dilek
@ 2017-07-07 13:17 ` Johannes Berg
  2017-07-07 16:37   ` Linus Torvalds
  1 sibling, 1 reply; 6+ messages in thread
From: Johannes Berg @ 2017-07-07 13:17 UTC (permalink / raw)
  To: Arend van Spriel, Kalle Valo; +Cc: Linus Torvalds, linux-wireless

On Fri, 2017-07-07 at 13:01 +0100, Arend van Spriel wrote:
> The lower level nl80211 code in cfg80211 ensures that "len" is
> between
> 25 and NL80211_ATTR_FRAME (2304).  We subtract DOT11_MGMT_HDR_LEN
> (24) from
> "len" so thats's max of 2280.  However, the action_frame->data[]
> buffer is
> only BRCMF_FIL_ACTION_FRAME_SIZE (1800) bytes long so this memcpy()
> can
> overflow.
> 
> 	memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
> 	       le16_to_cpu(action_frame->len));

Kalle is on vacation for the next 10 days or so.

Linus, since you were involved already, will you apply this directly?

Arend, otherwise please resend including netdev@, so we can ask davem
to pick it up (needs to land in his patchwork).

I guess it should also have a Cc: stable tag, and perhaps a Fixes?

Thanks,
johannes

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx()
  2017-07-07 13:17 ` Johannes Berg
@ 2017-07-07 16:37   ` Linus Torvalds
  0 siblings, 0 replies; 6+ messages in thread
From: Linus Torvalds @ 2017-07-07 16:37 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Arend van Spriel, Kalle Valo, Linux Wireless List

On Fri, Jul 7, 2017 at 6:17 AM, Johannes Berg <johannes@sipsolutions.net> wrote:
>
> Linus, since you were involved already, will you apply this directly?

I don't think it's _that_ urgent, since it's specific to one
particular driver anyway. I'd suggest just going through the normal
channels, and be cc'd to netdev.

> I guess it should also have a Cc: stable tag, and perhaps a Fixes?

The fixes tag would be

    Fixes: 18e2f61db3b70 ("brcmfmac: P2P action frame tx.")

which is 3.9 in case anybody cares. I assume that didn't get
backported any further.

                Linus

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx()
  2017-07-07 12:47 ` Sedat Dilek
@ 2017-07-07 19:39   ` Arend van Spriel
  2017-07-12  9:59     ` Sedat Dilek
  0 siblings, 1 reply; 6+ messages in thread
From: Arend van Spriel @ 2017-07-07 19:39 UTC (permalink / raw)
  To: sedat.dilek; +Cc: Kalle Valo, Linus Torvalds, linux-wireless

On 07-07-17 14:47, Sedat Dilek wrote:
> On Fri, Jul 7, 2017 at 2:01 PM, Arend van Spriel
> <arend.vanspriel@broadcom.com> wrote:
>> The lower level nl80211 code in cfg80211 ensures that "len" is between
>> 25 and NL80211_ATTR_FRAME (2304).  We subtract DOT11_MGMT_HDR_LEN (24) from
>> "len" so thats's max of 2280.  However, the action_frame->data[] buffer is
>> only BRCMF_FIL_ACTION_FRAME_SIZE (1800) bytes long so this memcpy() can
>> overflow.
>>
>>         memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
>>                le16_to_cpu(action_frame->len));
>>
>> Reported-by: "freenerguo(郭大兴)" <freenerguo@tencent.com>
>> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
>> ---
>> Hi Kalle,
>>
>> Here is the patch as Linus send it to us and security@kernel.org. I
>> removed the lower bound check as that is already done in cfg80211.
>> Now I signed off on the patch although formally I suppose Linus should
>> sign it off. Putting it out there so people can respond as deemed
>> necessary.
>>
>> Now fingers crossed whether patchwork will properly deal with the UTF-8
>> characters :-p
>>
> 
> Somehow horrific to see - less in usage (no CC here).

Sorry, Sedat

What is horrific? It is a bit cryptic (for me) what you would like me to
do now if anything.

Regards,
Arend

> - Sedat -
> 
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=grep&q=security%40kernel.org
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx()
  2017-07-07 19:39   ` Arend van Spriel
@ 2017-07-12  9:59     ` Sedat Dilek
  0 siblings, 0 replies; 6+ messages in thread
From: Sedat Dilek @ 2017-07-12  9:59 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: Kalle Valo, Linus Torvalds, linux-wireless

On Fri, Jul 7, 2017 at 9:39 PM, Arend van Spriel
<arend.vanspriel@broadcom.com> wrote:
> On 07-07-17 14:47, Sedat Dilek wrote:
>> On Fri, Jul 7, 2017 at 2:01 PM, Arend van Spriel
>> <arend.vanspriel@broadcom.com> wrote:
>>> The lower level nl80211 code in cfg80211 ensures that "len" is between
>>> 25 and NL80211_ATTR_FRAME (2304).  We subtract DOT11_MGMT_HDR_LEN (24) =
from
>>> "len" so thats's max of 2280.  However, the action_frame->data[] buffer=
 is
>>> only BRCMF_FIL_ACTION_FRAME_SIZE (1800) bytes long so this memcpy() can
>>> overflow.
>>>
>>>         memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
>>>                le16_to_cpu(action_frame->len));
>>>
>>> Reported-by: "freenerguo(=E9=83=AD=E5=A4=A7=E5=85=B4)" <freenerguo@tenc=
ent.com>
>>> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
>>> ---
>>> Hi Kalle,
>>>
>>> Here is the patch as Linus send it to us and security@kernel.org. I
>>> removed the lower bound check as that is already done in cfg80211.
>>> Now I signed off on the patch although formally I suppose Linus should
>>> sign it off. Putting it out there so people can respond as deemed
>>> necessary.
>>>
>>> Now fingers crossed whether patchwork will properly deal with the UTF-8
>>> characters :-p
>>>
>>
>> Somehow horrific to see - less in usage (no CC here).
>
> Sorry, Sedat
>
> What is horrific? It is a bit cryptic (for me) what you would like me to
> do now if anything.
>

You did a CC <security@kernel.org>, thanks.
Looking at the sources, docs and (commit) logs, this email-address
seems "unknown" and less in usage.

- Sedat -

> Regards,
> Arend
>
>> - Sedat -
>>
>> [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/l=
og/?qt=3Dgrep&q=3Dsecurity%40kernel.org
>>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-07-12 10:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-07 12:01 [PATCH] brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx() Arend van Spriel
2017-07-07 12:47 ` Sedat Dilek
2017-07-07 19:39   ` Arend van Spriel
2017-07-12  9:59     ` Sedat Dilek
2017-07-07 13:17 ` Johannes Berg
2017-07-07 16:37   ` Linus Torvalds

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).