Skip to content
/ linux Public

Commit 821f7d7

Browse files
committed
staging: rtl8723bs: properly validate the data in rtw_get_ie_ex()
commit f0109b9 upstream. Just like in commit 154828b ("staging: rtl8723bs: fix out-of-bounds read in rtw_get_ie() parser"), we don't trust the data in the frame so we should check the length better before acting on it Cc: stable <stable@kernel.org> Assisted-by: gkh_clanker_2000 Tested-by: Navaneeth K <knavaneeth786@gmail.com> Reviewed-by: Navaneeth K <knavaneeth786@gmail.com> Link: https://patch.msgid.link/2026022336-arrange-footwork-6e54@gregkh Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 27694cc commit 821f7d7

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

drivers/staging/rtl8723bs/core/rtw_ieee80211.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,20 +187,25 @@ u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, u
187187

188188
cnt = 0;
189189

190-
while (cnt < in_len) {
190+
while (cnt + 2 <= in_len) {
191+
u8 ie_len = in_ie[cnt + 1];
192+
193+
if (cnt + 2 + ie_len > in_len)
194+
break;
195+
191196
if (eid == in_ie[cnt]
192-
&& (!oui || !memcmp(&in_ie[cnt+2], oui, oui_len))) {
197+
&& (!oui || (ie_len >= oui_len && !memcmp(&in_ie[cnt + 2], oui, oui_len)))) {
193198
target_ie = &in_ie[cnt];
194199

195200
if (ie)
196-
memcpy(ie, &in_ie[cnt], in_ie[cnt+1]+2);
201+
memcpy(ie, &in_ie[cnt], ie_len + 2);
197202

198203
if (ielen)
199-
*ielen = in_ie[cnt+1]+2;
204+
*ielen = ie_len + 2;
200205

201206
break;
202207
}
203-
cnt += in_ie[cnt+1]+2; /* goto next */
208+
cnt += ie_len + 2; /* goto next */
204209
}
205210

206211
return target_ie;

0 commit comments

Comments
 (0)