aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorBrian Norris <briannorris@chromium.org>2018-09-21 16:42:41 -0400
committerKalle Valo <kvalo@codeaurora.org>2018-10-02 00:49:09 -0400
commite720ba1dcc33377231bcbc76e927f089e393ea60 (patch)
treef6d0af44e1ff272f724f21d90a4b896aa6f79757 /drivers/net/wireless/ath
parent4fb5837ac2bd46a85620b297002c704e9958f64d (diff)
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>
Diffstat (limited to 'drivers/net/wireless/ath')
-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,
1044 left = length - sizeof(*hdr); 1044 left = length - sizeof(*hdr);
1045 1045
1046 while (left > 0) { 1046 while (left > 0) {
1047 if (left < sizeof(*metadata)) {
1048 ath10k_warn(ar, "firmware segment is truncated: %d\n",
1049 left);
1050 ret = -EINVAL;
1051 break;
1052 }
1047 base_addr = __le32_to_cpu(metadata->addr); 1053 base_addr = __le32_to_cpu(metadata->addr);
1048 base_len = __le32_to_cpu(metadata->length); 1054 base_len = __le32_to_cpu(metadata->length);
1049 buf = metadata->data; 1055 buf = metadata->data;