diff options
author | Ron Rindjunsky <ron.rindjunsky@intel.com> | 2007-12-18 10:23:53 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:59:16 -0500 |
commit | 98f0b0a3a412eade153c7cf00c6b863600980d89 (patch) | |
tree | 5404eb10a289c27d79e6808bf0ba4dc69e958b58 /net/mac80211/util.c | |
parent | d647b36a69bf0a630ebf981bde3c0651e2779e5e (diff) |
mac80211: pass in PS_POLL frames
This patch fixes should_drop_frame function to pass in ps poll control
frames required for power save functioanlity. Interface types that do not
have interest for PS POLL frames now drop it in handler.
Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 7b278e9aa1a4..fb7fd896cd0d 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -135,13 +135,16 @@ u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len) | |||
135 | { | 135 | { |
136 | u16 fc; | 136 | u16 fc; |
137 | 137 | ||
138 | if (len < 24) | 138 | /* drop ACK/CTS frames and incorrect hdr len (ctrl) */ |
139 | if (len < 16) | ||
139 | return NULL; | 140 | return NULL; |
140 | 141 | ||
141 | fc = le16_to_cpu(hdr->frame_control); | 142 | fc = le16_to_cpu(hdr->frame_control); |
142 | 143 | ||
143 | switch (fc & IEEE80211_FCTL_FTYPE) { | 144 | switch (fc & IEEE80211_FCTL_FTYPE) { |
144 | case IEEE80211_FTYPE_DATA: | 145 | case IEEE80211_FTYPE_DATA: |
146 | if (len < 24) /* drop incorrect hdr len (data) */ | ||
147 | return NULL; | ||
145 | switch (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) { | 148 | switch (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) { |
146 | case IEEE80211_FCTL_TODS: | 149 | case IEEE80211_FCTL_TODS: |
147 | return hdr->addr1; | 150 | return hdr->addr1; |
@@ -154,6 +157,8 @@ u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len) | |||
154 | } | 157 | } |
155 | break; | 158 | break; |
156 | case IEEE80211_FTYPE_MGMT: | 159 | case IEEE80211_FTYPE_MGMT: |
160 | if (len < 24) /* drop incorrect hdr len (mgmt) */ | ||
161 | return NULL; | ||
157 | return hdr->addr3; | 162 | return hdr->addr3; |
158 | case IEEE80211_FTYPE_CTL: | 163 | case IEEE80211_FTYPE_CTL: |
159 | if ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PSPOLL) | 164 | if ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PSPOLL) |