aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/util.c
diff options
context:
space:
mode:
authorRon Rindjunsky <ron.rindjunsky@intel.com>2007-12-18 10:23:53 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:59:16 -0500
commit98f0b0a3a412eade153c7cf00c6b863600980d89 (patch)
tree5404eb10a289c27d79e6808bf0ba4dc69e958b58 /net/mac80211/util.c
parentd647b36a69bf0a630ebf981bde3c0651e2779e5e (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.c7
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)