Message ID | 20210408154518.d9b06d39b4ee.Iff908997b2a4067e8d456b3cb96cab9771d252b8@changeid |
---|---|
State | New |
Headers | show |
Series | nl80211: fix beacon head validation | expand |
Hello, syzbot has tested the proposed patch and the reproducer did not trigger any issue: Reported-and-tested-by: syzbot+72b99dcf4607e8c770f3@syzkaller.appspotmail.com Tested on: commit: 29ad81a1 arch/x86: add missing include to sparsemem.h git tree: https://github.com/google/kmsan.git master kernel config: https://syzkaller.appspot.com/x/.config?x=e6213d08918028fb dashboard link: https://syzkaller.appspot.com/bug?extid=72b99dcf4607e8c770f3 compiler: Debian clang version 11.0.1-2 patch: https://syzkaller.appspot.com/x/patch.diff?x=14424d31d00000 Note: testing is done by a robot and is best-effort only.
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index adfa07c67b44..03426cf17ee6 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -229,9 +229,13 @@ static int validate_beacon_head(const struct nlattr *attr, unsigned int len = nla_len(attr); const struct element *elem; const struct ieee80211_mgmt *mgmt = (void *)data; - bool s1g_bcn = ieee80211_is_s1g_beacon(mgmt->frame_control); unsigned int fixedlen, hdrlen; + bool s1g_bcn; + if (len < offsetofend(typeof(*mgmt), frame_control)) + goto err; + + s1g_bcn = ieee80211_is_s1g_beacon(mgmt->frame_control); if (s1g_bcn) { fixedlen = offsetof(struct ieee80211_ext, u.s1g_beacon.variable);