diff --git a/drivers/net/wireless/bcmdhd/dhd_common.c b/drivers/net/wireless/bcmdhd/dhd_common.c
index d6f31a97757771a0311c5b65e6f0ba9446824543..01cc8be004f7d034da1bc9fa3fda800c5de3a11b 100644
--- a/drivers/net/wireless/bcmdhd/dhd_common.c
+++ b/drivers/net/wireless/bcmdhd/dhd_common.c
@@ -1614,6 +1614,9 @@ wl_host_event(dhd_pub_t *dhd_pub, int *ifidx, void *pktdata, size_t pktlen,
return (BCME_ERROR);
}
+ if (pktlen < sizeof(bcm_event_t))
+ return (BCME_ERROR);
+
*data_ptr = &pvt_data[1];
event_data = *data_ptr;
@@ -1625,6 +1628,9 @@ wl_host_event(dhd_pub_t *dhd_pub, int *ifidx, void *pktdata, size_t pktlen,
flags = ntoh16_ua((void *)&event->flags);
status = ntoh32_ua((void *)&event->status);
datalen = ntoh32_ua((void *)&event->datalen);
+ if (datalen > pktlen)
+ return (BCME_ERROR);
+
evlen = datalen + sizeof(bcm_event_t);
if (evlen > pktlen) {
return (BCME_ERROR);
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index d55ff65c713308e95ca83abb4bd3b22a4985b691..74e3ed9941a67a7222f8e2fc3db54f4ad5e9bbc0 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -2771,7 +2771,7 @@ dhd_rx_frame(dhd_pub_t *dhdp, int ifidx, void *pktbuf, int numpkt, uint8 chan)
#else
skb->mac.raw,
#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) */
- len,
+ len - 2,
&event,
&data);