summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath10k/sdio.c
diff options
context:
space:
mode:
authorKalle Valo <kvalo@codeaurora.org>2020-01-26 17:54:46 +0200
committerKalle Valo <kvalo@codeaurora.org>2020-01-26 17:54:46 +0200
commit2a13513f99e735184fd6f889d78da6424fda80a1 (patch)
tree1e8284f8b7eb65cb30cb7717561a7e6ff5c7a5b6 /drivers/net/wireless/ath/ath10k/sdio.c
parentc2f9a4e4a5abfc84c01b738496b3fd2d471e0b18 (diff)
parentd7809bd9eae67b4252cbc4672431610227cbb729 (diff)
downloadlinux-2a13513f99e735184fd6f889d78da6424fda80a1.tar.bz2
Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
ath.git patches for v5.6. Major changes: ar5523 * add support for SMCWUSBT-G2 USB device
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/sdio.c')
-rw-r--r--drivers/net/wireless/ath/ath10k/sdio.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
index 6fdf71b8b676..e5316b911e1d 100644
--- a/drivers/net/wireless/ath/ath10k/sdio.c
+++ b/drivers/net/wireless/ath/ath10k/sdio.c
@@ -642,16 +642,23 @@ static int ath10k_sdio_mbox_rx_fetch(struct ath10k *ar)
ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr,
skb->data, pkt->alloc_len);
-
- if (ret) {
- ar_sdio->n_rx_pkts = 0;
- ath10k_sdio_mbox_free_rx_pkt(pkt);
- return ret;
- }
+ if (ret)
+ goto err;
htc_hdr = (struct ath10k_htc_hdr *)skb->data;
pkt->act_len = le16_to_cpu(htc_hdr->len) + sizeof(*htc_hdr);
+
+ if (pkt->act_len > pkt->alloc_len) {
+ ret = -EINVAL;
+ goto err;
+ }
+
skb_put(skb, pkt->act_len);
+ return 0;
+
+err:
+ ar_sdio->n_rx_pkts = 0;
+ ath10k_sdio_mbox_free_rx_pkt(pkt);
return ret;
}
@@ -687,6 +694,11 @@ static int ath10k_sdio_mbox_rx_fetch_bundle(struct ath10k *ar)
htc_hdr = (struct ath10k_htc_hdr *)(ar_sdio->vsg_buffer + pkt_offset);
pkt->act_len = le16_to_cpu(htc_hdr->len) + sizeof(*htc_hdr);
+ if (pkt->act_len > pkt->alloc_len ) {
+ ret = -EINVAL;
+ goto err;
+ }
+
skb_put_data(pkt->skb, htc_hdr, pkt->act_len);
pkt_offset += pkt->alloc_len;
}