summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Bergamini <damien@cvs.openbsd.org>2007-08-01 16:16:10 +0000
committerDamien Bergamini <damien@cvs.openbsd.org>2007-08-01 16:16:10 +0000
commit7e3961400285ba25b52492f91d5466f498fe3ed7 (patch)
treef7ccf434fe677fd2d5b6bb765fbcfc8967f10c8d
parent6f9116062ffbe0bf23511c85456adf3a0446afed (diff)
make ieee80211_recv_wpa_group_msg1() install the GTK in ic_nw_keys[] too.
i only converted ieee80211_recv_rsn_group_msg1() in my previous commit.
-rw-r--r--sys/net80211/ieee80211_input.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index 31128e87015..4a800dd2feb 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -1,5 +1,5 @@
/* $NetBSD: ieee80211_input.c,v 1.24 2004/05/31 11:12:24 dyoung Exp $ */
-/* $OpenBSD: ieee80211_input.c,v 1.56 2007/08/01 15:40:40 damien Exp $ */
+/* $OpenBSD: ieee80211_input.c,v 1.57 2007/08/01 16:16:09 damien Exp $ */
/*-
* Copyright (c) 2001 Atsushi Onoe
* Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
@@ -2297,8 +2297,9 @@ void
ieee80211_recv_wpa_group_msg1(struct ieee80211com *ic,
struct ieee80211_eapol_key *key, struct ieee80211_node *ni)
{
- struct ieee80211_key k;
+ struct ieee80211_key *k;
u_int16_t info;
+ u_int8_t kid;
if (ic->ic_opmode != IEEE80211_M_STA &&
ic->ic_opmode != IEEE80211_M_IBSS)
@@ -2318,19 +2319,21 @@ ieee80211_recv_wpa_group_msg1(struct ieee80211com *ic,
info = BE_READ_2(key->info);
/* install the GTK */
- memset(&k, 0, sizeof k);
- k.k_id = (info >> EAPOL_KEY_WPA_KID_SHIFT) & 3;
- k.k_cipher = ni->ni_group_cipher;
- k.k_flags = IEEE80211_KEY_GROUP;
+ kid = (info >> EAPOL_KEY_WPA_KID_SHIFT) & 3;
+ k = &ic->ic_nw_keys[kid];
+ memset(k, 0, sizeof(*k));
+ k->k_id = kid;
+ k->k_cipher = ni->ni_group_cipher;
+ k->k_flags = IEEE80211_KEY_GROUP;
if (info & EAPOL_KEY_WPA_TX)
- k.k_flags |= IEEE80211_KEY_TX;
- k.k_len = BE_READ_2(key->keylen);
+ k->k_flags |= IEEE80211_KEY_TX;
+ k->k_len = BE_READ_2(key->keylen);
/* check that key length matches group cipher */
- if (k.k_len != ieee80211_cipher_keylen(k.k_cipher))
+ if (k->k_len != ieee80211_cipher_keylen(k->k_cipher))
return;
- memcpy(k.k_key, (u_int8_t *)&key[1], k.k_len);
- k.k_rsc = LE_READ_8(key->rsc);
- if ((*ic->ic_set_key)(ic, ni, &k) != 0)
+ memcpy(k->k_key, (u_int8_t *)&key[1], k->k_len);
+ k->k_rsc = LE_READ_8(key->rsc);
+ if ((*ic->ic_set_key)(ic, ni, k) != 0)
return;
/* update the last seen value of the key replay counter field */