brcmfmac: Add check for short event packets
authorKevin Cernekee <cernekee@chromium.org>
Sun, 17 Sep 2017 04:08:24 +0000 (21:08 -0700)
committerRaspbian kernel package updater <root@raspbian.org>
Sun, 8 Oct 2017 01:09:29 +0000 (01:09 +0000)
The length of the data in the received skb is currently passed into
brcmf_fweh_process_event() as packet_len, but this value is not checked.
event_packet should be followed by DATALEN bytes of additional event
data.  Ensure that the received packet actually contains at least
DATALEN bytes of additional data, to avoid copying uninitialized memory
into event->data.

Suggested-by: Mattias Nissler <mnissler@chromium.org>
Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c

index d5787324cd6a6ca780d581d48bc850088844f454..27e7d38c03bad3dfa5905f39c5ee6b6cb21a18e6 100644 (file)
@@ -424,7 +424,8 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
        if (code != BRCMF_E_IF && !fweh->evt_handler[code])
                return;
 
-       if (datalen > BRCMF_DCMD_MAXLEN)
+       if (datalen > BRCMF_DCMD_MAXLEN ||
+           datalen + sizeof(*event_packet) > packet_len)
                return;
 
        if (in_interrupt())