diff options
author | Ansuel Smith <ansuelsmth@gmail.com> | 2021-01-06 04:05:37 +0100 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2021-01-06 17:38:07 +0000 |
commit | 0702f322949bb276ae42b77c8c0cd89d8a5d0318 (patch) | |
tree | d789bf6190b19a060e781b6b5163637e0e441dc6 /iwinfo_nl80211.c | |
parent | 618c1e86f039b815e3c6b79e91ea706a830716a0 (diff) | |
download | iwinfo-0702f322949bb276ae42b77c8c0cd89d8a5d0318.tar.gz |
iwinfo: improve center channel handling
- Improve iwinfo center channel struct position
- Prevent read beyond buffer on malformed data
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Diffstat (limited to 'iwinfo_nl80211.c')
-rw-r--r-- | iwinfo_nl80211.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c index 0a94216..29bdc8c 100644 --- a/iwinfo_nl80211.c +++ b/iwinfo_nl80211.c @@ -2380,14 +2380,18 @@ static void nl80211_get_scanlist_ie(struct nlattr **bss, IWINFO_CIPHER_TKIP, IWINFO_KMGMT_PSK); break; case 61: /* HT oeration */ - e->ht_chan_info.primary_chan = ie[2]; - e->ht_chan_info.secondary_chan_off = ie[3] & 0x3; - e->ht_chan_info.chan_width = (ie[4] & 0x4)>>2; + if (ie[1] >= 3) { + e->ht_chan_info.primary_chan = ie[2]; + e->ht_chan_info.secondary_chan_off = ie[3] & 0x3; + e->ht_chan_info.chan_width = (ie[4] & 0x4)>>2; + } break; case 192: /* VHT operation */ - e->vht_chan_info.chan_width = ie[2]; - e->vht_chan_info.center_chan_1 = ie[3]; - e->vht_chan_info.center_chan_2 = ie[4]; + if (ie[1] >= 3) { + e->vht_chan_info.chan_width = ie[2]; + e->vht_chan_info.center_chan_1 = ie[3]; + e->vht_chan_info.center_chan_2 = ie[4]; + } break; } @@ -3347,6 +3351,8 @@ const struct iwinfo_ops nl80211_ops = { .name = "nl80211", .probe = nl80211_probe, .channel = nl80211_get_channel, + .center_chan1 = nl80211_get_center_chan1, + .center_chan2 = nl80211_get_center_chan2, .frequency = nl80211_get_frequency, .frequency_offset = nl80211_get_frequency_offset, .txpower = nl80211_get_txpower, @@ -3375,7 +3381,5 @@ const struct iwinfo_ops nl80211_ops = { .countrylist = nl80211_get_countrylist, .survey = nl80211_get_survey, .lookup_phy = nl80211_lookup_phyname, - .close = nl80211_close, - .center_chan1 = nl80211_get_center_chan1, - .center_chan2 = nl80211_get_center_chan2 + .close = nl80211_close }; |