Message ID | 20210610161916.9307-1-mail@anirudhrb.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | mac80211_hwsim: correctly handle zero length frames | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On Thu, 2021-06-10 at 21:49 +0530, Anirudh Rayabharam wrote: > syzbot, using KMSAN, has reported an uninit-value access in > hwsim_cloned_frame_received_nl(). This is happening because frame_data_len > is 0. The code doesn't detect this case and blindly tries to read the > frame's header. > > Fix this by bailing out in case frame_data_len is 0. This really seems quite pointless - you should bail out if the frame is too short for what we need to do, not just when it's 0. johannes
On Fri, Jun 18, 2021 at 11:36:16AM +0200, Johannes Berg wrote: > On Thu, 2021-06-10 at 21:49 +0530, Anirudh Rayabharam wrote: > > syzbot, using KMSAN, has reported an uninit-value access in > > hwsim_cloned_frame_received_nl(). This is happening because frame_data_len > > is 0. The code doesn't detect this case and blindly tries to read the > > frame's header. > > > > Fix this by bailing out in case frame_data_len is 0. > > This really seems quite pointless - you should bail out if the frame is > too short for what we need to do, not just when it's 0. That makes sense. Do you happen to know what the min length of a valid frame is? There doesn't seem to be constant defined for that already. - Anirudh > > johannes >
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 51ce767eaf88..ccfe40313109 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -3649,7 +3649,7 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2, if (skb == NULL) goto err; - if (frame_data_len > IEEE80211_MAX_DATA_LEN) + if (frame_data_len == 0 || frame_data_len > IEEE80211_MAX_DATA_LEN) goto err; /* Copy the data */