summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Norris <briannorris@chromium.org>2018-09-21 13:42:41 -0700
committerKalle Valo <kvalo@codeaurora.org>2018-10-02 07:49:09 +0300
commite720ba1dcc33377231bcbc76e927f089e393ea60 (patch)
treef6d0af44e1ff272f724f21d90a4b896aa6f79757
parent4fb5837ac2bd46a85620b297002c704e9958f64d (diff)
downloadlinux-stable-e720ba1dcc33377231bcbc76e927f089e393ea60.tar.gz
linux-stable-e720ba1dcc33377231bcbc76e927f089e393ea60.tar.bz2
linux-stable-e720ba1dcc33377231bcbc76e927f089e393ea60.zip
ath10k: add missing sanity check on diag download
ath10k_hw_diag_fast_download() generally has good boundary checking, but it misses verifying that the next metadata header actually fits in the remaining buffer space. Add such a check. Fixes: 39501ea64116 ("ath10k: download firmware via diag Copy Engine for QCA6174 and QCA9377.") Signed-off-by: Brian Norris <briannorris@chromium.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r--drivers/net/wireless/ath/ath10k/hw.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/hw.c b/drivers/net/wireless/ath/ath10k/hw.c
index 2c2870e3e84d..af8ae8117c62 100644
--- a/drivers/net/wireless/ath/ath10k/hw.c
+++ b/drivers/net/wireless/ath/ath10k/hw.c
@@ -1044,6 +1044,12 @@ int ath10k_hw_diag_fast_download(struct ath10k *ar,
left = length - sizeof(*hdr);
while (left > 0) {
+ if (left < sizeof(*metadata)) {
+ ath10k_warn(ar, "firmware segment is truncated: %d\n",
+ left);
+ ret = -EINVAL;
+ break;
+ }
base_addr = __le32_to_cpu(metadata->addr);
base_len = __le32_to_cpu(metadata->length);
buf = metadata->data;