BSS: Use variable length array for IEs at the end of struct wpa_bss

Replace the previously used design "(u8 *) (bss + 1)" with a variable
length array at the end of struct wpa_bss bss->ies[] in hopes of making
this easier to understand for static analyzers.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
Jouni Malinen 2020-11-16 16:25:17 +02:00 committed by Jouni Malinen
parent be7ee264f6
commit 454ebb504c
2 changed files with 5 additions and 4 deletions

View file

@ -464,7 +464,7 @@ static struct wpa_bss * wpa_bss_add(struct wpa_supplicant *wpa_s,
bss->ssid_len = ssid_len; bss->ssid_len = ssid_len;
bss->ie_len = res->ie_len; bss->ie_len = res->ie_len;
bss->beacon_ie_len = res->beacon_ie_len; bss->beacon_ie_len = res->beacon_ie_len;
os_memcpy(bss + 1, res + 1, res->ie_len + res->beacon_ie_len); os_memcpy(bss->ies, res + 1, res->ie_len + res->beacon_ie_len);
wpa_bss_set_hessid(bss); wpa_bss_set_hessid(bss);
if (wpa_s->num_bss + 1 > wpa_s->conf->bss_max_count && if (wpa_s->num_bss + 1 > wpa_s->conf->bss_max_count &&
@ -691,7 +691,7 @@ wpa_bss_update(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
#endif /* CONFIG_P2P */ #endif /* CONFIG_P2P */
if (bss->ie_len + bss->beacon_ie_len >= if (bss->ie_len + bss->beacon_ie_len >=
res->ie_len + res->beacon_ie_len) { res->ie_len + res->beacon_ie_len) {
os_memcpy(bss + 1, res + 1, res->ie_len + res->beacon_ie_len); os_memcpy(bss->ies, res + 1, res->ie_len + res->beacon_ie_len);
bss->ie_len = res->ie_len; bss->ie_len = res->ie_len;
bss->beacon_ie_len = res->beacon_ie_len; bss->beacon_ie_len = res->beacon_ie_len;
} else { } else {
@ -712,7 +712,7 @@ wpa_bss_update(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
wpa_s->current_bss = nbss; wpa_s->current_bss = nbss;
wpa_bss_update_pending_connect(wpa_s, bss, nbss); wpa_bss_update_pending_connect(wpa_s, bss, nbss);
bss = nbss; bss = nbss;
os_memcpy(bss + 1, res + 1, os_memcpy(bss->ies, res + 1,
res->ie_len + res->beacon_ie_len); res->ie_len + res->beacon_ie_len);
bss->ie_len = res->ie_len; bss->ie_len = res->ie_len;
bss->beacon_ie_len = res->beacon_ie_len; bss->beacon_ie_len = res->beacon_ie_len;

View file

@ -111,11 +111,12 @@ struct wpa_bss {
size_t beacon_ie_len; size_t beacon_ie_len;
/* followed by ie_len octets of IEs */ /* followed by ie_len octets of IEs */
/* followed by beacon_ie_len octets of IEs */ /* followed by beacon_ie_len octets of IEs */
u8 ies[];
}; };
static inline const u8 * wpa_bss_ie_ptr(const struct wpa_bss *bss) static inline const u8 * wpa_bss_ie_ptr(const struct wpa_bss *bss)
{ {
return (const u8 *) (bss + 1); return bss->ies;
} }
void wpa_bss_update_start(struct wpa_supplicant *wpa_s); void wpa_bss_update_start(struct wpa_supplicant *wpa_s);