]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Set EAPOL-Key Key Length field to 0 for group message 1/2 in RSN
authorJouni Malinen <j@w1.fi>
Sun, 5 Feb 2017 11:52:43 +0000 (13:52 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 5 Feb 2017 11:52:43 +0000 (13:52 +0200)
P802.11i/D3.0 described the Key Length as having value 16 for the group
key handshake. However, this was changed to 0 in the published IEEE Std
802.11i-2004 amendment (and still remains 0 in the current standard IEEE
Std 802.11-2016). We need to maintain the non-zero value for WPA (v1)
cases, but the RSN case can be changed to 0 to be closer to the current
standard.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/ap/wpa_auth.c

index 0d60d328945ee27e32e222d7fb82cfb95ebd2f45..0bd901fbfc7cbf7ef22f6ead51c0120e97562cf8 100644 (file)
@@ -1484,9 +1484,11 @@ void __wpa_send_eapol(struct wpa_authenticator *wpa_auth,
        WPA_PUT_BE16(key->key_info, key_info);
 
        alg = pairwise ? sm->pairwise : wpa_auth->conf.wpa_group;
-       WPA_PUT_BE16(key->key_length, wpa_cipher_key_len(alg));
-       if (key_info & WPA_KEY_INFO_SMK_MESSAGE)
+       if ((key_info & WPA_KEY_INFO_SMK_MESSAGE) ||
+           (sm->wpa == WPA_VERSION_WPA2 && !pairwise))
                WPA_PUT_BE16(key->key_length, 0);
+       else
+               WPA_PUT_BE16(key->key_length, wpa_cipher_key_len(alg));
 
        /* FIX: STSL: what to use as key_replay_counter? */
        for (i = RSNA_MAX_EAPOL_RETRIES - 1; i > 0; i--) {