summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnson <quic_jjohnson@quicinc.com>2023-08-31 11:22:57 -0700
committerKalle Valo <kvalo@kernel.org>2023-09-18 17:28:12 +0300
commitb7bcea9c27b3d87b54075735c870500123582145 (patch)
treed7a5fb7e4b0120b6591e0f7b16f91c1c85ab185a
parentddd7f45c899f7524bdbe6a32fe4906cde8b07b9b (diff)
wifi: cw1200: Avoid processing an invalid TIM IE
While converting struct ieee80211_tim_ie::virtual_map to be a flexible array it was observed that the TIM IE processing in cw1200_rx_cb() could potentially process a malformed IE in a manner that could result in a buffer over-read. Add logic to verify that the TIM IE length is large enough to hold a valid TIM payload before processing it. Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20230831-ieee80211_tim_ie-v3-1-e10ff584ab5d@quicinc.com
-rw-r--r--drivers/net/wireless/st/cw1200/txrx.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/wireless/st/cw1200/txrx.c b/drivers/net/wireless/st/cw1200/txrx.c
index 6894b919ff94..e16e9ae90d20 100644
--- a/drivers/net/wireless/st/cw1200/txrx.c
+++ b/drivers/net/wireless/st/cw1200/txrx.c
@@ -1166,7 +1166,7 @@ void cw1200_rx_cb(struct cw1200_common *priv,
size_t ies_len = skb->len - (ies - (u8 *)(skb->data));
tim_ie = cfg80211_find_ie(WLAN_EID_TIM, ies, ies_len);
- if (tim_ie) {
+ if (tim_ie && tim_ie[1] >= sizeof(struct ieee80211_tim_ie)) {
struct ieee80211_tim_ie *tim =
(struct ieee80211_tim_ie *)&tim_ie[2];