diff --git a/drivers/staging/qcacld-3.0/core/wma/src/wma_power.c b/drivers/staging/qcacld-3.0/core/wma/src/wma_power.c index a0006297a078..cec59a12c118 100644 --- a/drivers/staging/qcacld-3.0/core/wma/src/wma_power.c +++ b/drivers/staging/qcacld-3.0/core/wma/src/wma_power.c @@ -1358,6 +1358,14 @@ static void wma_update_beacon_noa_ie(struct beacon_info *bcn, bcn->noa_ie = buf + bcn->len; } + if (bcn->len + sizeof(struct p2p_ie) + new_noa_sub_ie_len > + SIR_MAX_BEACON_SIZE) { + wma_err("exceed max beacon length, bcn->len %d, new_noa_sub_ie_len %d, p2p len %u", + bcn->len, new_noa_sub_ie_len, + (uint32_t)sizeof(struct p2p_ie)); + return; + } + bcn->noa_sub_ie_len = new_noa_sub_ie_len; wma_add_p2p_ie(bcn->noa_ie); p2p_ie = (struct p2p_ie *)bcn->noa_ie;