aboutsummaryrefslogtreecommitdiffstats
path: root/hostapd
diff options
context:
space:
mode:
authorJouni Malinen <jouni@codeaurora.org>2019-02-11 23:16:13 (GMT)
committerJouni Malinen <j@w1.fi>2019-02-11 23:23:30 (GMT)
commitfe468b071434098b74baffb361bf9e9375609dd8 (patch)
tree6ce5e4c3f1c04316940a54ab9dcfd3488ba10f5b /hostapd
parent6c02fa214b215e45244dcd7100bba3315efe4a4d (diff)
downloadhostap-fe468b071434098b74baffb361bf9e9375609dd8.zip
hostap-fe468b071434098b74baffb361bf9e9375609dd8.tar.gz
hostap-fe468b071434098b74baffb361bf9e9375609dd8.tar.bz2
HE: Fix set_he_cap() parsing of config options for MU EDCA Params
When I replaced the POS() function with ffs() when applying relevant parts from the original patch, this ended up breaking the frame construction since the POS() function was supposed to count the bit offset for the mask with 0 being the LSB instead of 1 returned by ffs(). Furthermore, ffs() is not available in all C libraries (e.g., not directly exposed by strings.h on Android), so better not depend on that or compiler builtins for this since there is no need for this to be as fast as possible in configuration parsing. Fix this with a simple function to determine the number of bits the value needs to be shifted left to align with the mask. Fixes: 11ce7a1bc3e2 ("HE: Add MU EDCA Parameter Set element (AP)") Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Diffstat (limited to 'hostapd')
-rw-r--r--hostapd/config_file.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index aeec1d9..c8ff7a0 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -1380,10 +1380,26 @@ static int hostapd_config_vht_capab(struct hostapd_config *conf,
#ifdef CONFIG_IEEE80211AX
+
+static u8 find_bit_offset(u8 val)
+{
+ u8 res = 0;
+
+ for (; val; val >>= 1) {
+ if (val & 1)
+ break;
+ res++;
+ }
+
+ return res;
+}
+
+
static u8 set_he_cap(int val, u8 mask)
{
- return (u8) (mask & (val << ffs(mask)));
+ return (u8) (mask & (val << find_bit_offset(mask)));
}
+
#endif /* CONFIG_IEEE80211AX */