NULL, 0);
forced_memzero(&igtk, sizeof(igtk));
+ if (gsm->vlan_id) {
+ wpa_printf(MSG_DEBUG, "Fetch BIGTK from default VLAN");
+ gsm = wpa_auth->group;
+ }
+
if (wpa_auth->conf.tx_bss_auth) {
wpa_auth = wpa_auth->conf.tx_bss_auth;
conf = &wpa_auth->conf;
if (!beacon_prot)
return;
+ if (gsm->vlan_id) {
+ wpa_printf(MSG_DEBUG, "Fetch BIGTK from default VLAN");
+ gsm = a->group;
+ }
+
if (a->conf.tx_bss_auth) {
a = a->conf.tx_bss_auth;
gsm = a->group;
group->IGTK[group->GN_igtk - 4], len);
}
+ /* Skip BIGTK generation for groups with a non-zero VLAN ID since only
+ * a single BIGTK is shared for all VLANs in a BSS. */
+ if (group->vlan_id)
+ return ret;
+
if (!wpa_auth->non_tx_beacon_prot &&
!wpa_auth_pmf_enabled(conf))
return ret;
KEY_FLAG_GROUP_TX_DEFAULT) < 0)
ret = -1;
- if (ret || !conf->beacon_prot)
+ /* Skip setting of BIGTK for groups with a non-zero VLAN ID
+ * since only a single BIGTK is shared for all VLANs in a BSS.
+ */
+ if (ret || !conf->beacon_prot || group->vlan_id)
return ret;
if (wpa_auth->conf.tx_bss_auth) {
wpa_auth = wpa_auth->conf.tx_bss_auth;