summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortinlin <tinlin@codeaurora.org>2018-11-16 14:10:38 +0800
committertinlin <tinlin@codeaurora.org>2018-11-16 14:10:38 +0800
commitf031013a654310d8388b3a20bc7d9526e4a175d4 (patch)
tree54bebe1390884ac40aafa8b8c0098ffca3c66dee
parentb4036eac15ca566812fa5fdac596b9e1edc9645e (diff)
qcacld-2.0: Fix possible OOB access while sending NAN msg to firmware
Fix possible OOB access while sending NAN msg to firmware, by checking data len calculation against integer overflow and making sure data len to be less than max wmi msg size. Change-Id: I98f42b9924a1810282ae3bca031cd5a1e3dd4047 CRs-Fixed: 2350914
-rw-r--r--CORE/SERVICES/WMA/wma.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 4491528675eb..22f3cb96383d 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -31920,6 +31920,18 @@ static VOS_STATUS wma_nan_req(void *wda_handle, tpNanRequest nan_req)
nan_data_len = nan_req->request_data_len;
nan_data_len_aligned = roundup(nan_req->request_data_len,
sizeof(u_int32_t));
+ if (nan_data_len_aligned < nan_req->request_data_len) {
+ WMA_LOGE("%s: integer overflow while rounding up data_len",
+ __func__);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ if (nan_data_len_aligned > WMA_SVC_MSG_MAX_SIZE - WMI_TLV_HDR_SIZE) {
+ WMA_LOGE("%s: wmi_max_msg_size overflow for given datalen",
+ __func__);
+ return VOS_STATUS_E_NOMEM;
+ }
+
len += WMI_TLV_HDR_SIZE + nan_data_len_aligned;
buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
if (!buf) {