]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Use more consistent set_key seq value when nothing is being set
authorJouni Malinen <j@w1.fi>
Sun, 9 Jan 2011 10:09:04 +0000 (12:09 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 9 Jan 2011 10:09:04 +0000 (12:09 +0200)
Use NULL instead of (u8 *) "" as the seq value and make sure the
driver wrapper implementations can handle NULL value. This was
previously already done in number of places, but not everywhere.

src/drivers/driver.h
src/drivers/driver_atmel.c
src/drivers/driver_bsd.c
src/drivers/driver_hostap.c
src/drivers/driver_ipw.c
src/drivers/driver_madwifi.c
src/drivers/driver_ndiswrapper.c
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/wpas_glue.c

index 1ad48dd79d1b10a2ed7f00fc65584b0d06db1bff..65f5ce5f28a594c5544ab4bb47960c0bf5c7008b 100644 (file)
@@ -753,7 +753,7 @@ struct wpa_driver_ops {
         * @seq: sequence number/packet number, seq_len octets, the next
         *      packet number to be used for in replay protection; configured
         *      for Rx keys (in most cases, this is only used with broadcast
-        *      keys and set to zero for unicast keys)
+        *      keys and set to zero for unicast keys); %NULL if not set
         * @seq_len: length of the seq, depends on the algorithm:
         *      TKIP: 6 octets, CCMP: 6 octets, IGTK: 6 octets
         * @key: key buffer; TKIP: 16-byte temporal key, 8-byte Tx Mic key,
index cbec6c38d78d45ba6a2e260b305200cdf1a25ccc..8d748d386825a0fd4a2c34d945b2668b33777d8f 100644 (file)
@@ -248,7 +248,8 @@ static int wpa_driver_atmel_set_key(const char *ifname, void *priv,
         param->alg = alg_type;
         param->key_idx = key_idx;
         param->set_tx = set_tx;
-        os_memcpy(param->seq, seq, seq_len);
+       if (seq)
+               os_memcpy(param->seq, seq, seq_len);
         param->seq_len = seq_len;
         param->key_len = key_len;
        os_memcpy((u8 *)param->key, key, key_len);
index 6067dc391a2240a1c460a35f091b46dc7b475fe5..c9520ec1ad30ded2a337a83d428906c1e58dbc30 100644 (file)
@@ -347,7 +347,8 @@ bsd_set_key(const char *ifname, void *priv, enum wpa_alg alg,
        if (wk.ik_keyix != IEEE80211_KEYIX_NONE && set_tx)
                wk.ik_flags |= IEEE80211_KEY_DEFAULT;
        wk.ik_keylen = key_len;
-       os_memcpy(&wk.ik_keyrsc, seq, seq_len);
+       if (seq)
+               os_memcpy(&wk.ik_keyrsc, seq, seq_len);
        os_memcpy(wk.ik_keydata, key, key_len);
 
        return set80211var(priv, IEEE80211_IOC_WPAKEY, &wk, sizeof(wk));
index e47983cb7f306189784a715bf36a3543338dffa7..624293b767030f609f92a4fe998e557d8f5e2ca6 100644 (file)
@@ -1307,7 +1307,8 @@ static int wpa_driver_hostap_set_key(const char *ifname, void *priv,
                   HOSTAP_CRYPT_ALG_NAME_LEN);
        param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0;
        param->u.crypt.idx = key_idx;
-       os_memcpy(param->u.crypt.seq, seq, seq_len);
+       if (seq)
+               os_memcpy(param->u.crypt.seq, seq, seq_len);
        param->u.crypt.key_len = key_len;
        os_memcpy((u8 *) (param + 1), key, key_len);
 
index 77984f9e5c4cc6bca62b8661b0d3345a5298dbe6..d6c8f2939910b053a3f9dbb7b21271df7da97536 100644 (file)
@@ -264,7 +264,8 @@ static int wpa_driver_ipw_set_key(const char *ifname, void *priv,
                   IPW_CRYPT_ALG_NAME_LEN);
        param->u.crypt.set_tx = set_tx ? 1 : 0;
        param->u.crypt.idx = key_idx;
-       os_memcpy(param->u.crypt.seq, seq, seq_len);
+       if (seq)
+               os_memcpy(param->u.crypt.seq, seq, seq_len);
        param->u.crypt.key_len = key_len;
        os_memcpy((u8 *) (param + 1), key, key_len);
 
index ebbdfeb3b824874d81b3a5966195691d42f8c563..570fc4c96441f2d1df4a071d42e2b983d39c715a 100644 (file)
@@ -1511,7 +1511,7 @@ wpa_driver_madwifi_set_key(const char *ifname, void *priv, enum wpa_alg alg,
        wk.ik_keyix = key_idx;
        wk.ik_keylen = key_len;
 #ifdef WORDS_BIGENDIAN
-       {
+       if (seq) {
                size_t i;
                u8 tmp[WPA_KEY_RSC_LEN];
                os_memset(tmp, 0, sizeof(tmp));
@@ -1520,7 +1520,8 @@ wpa_driver_madwifi_set_key(const char *ifname, void *priv, enum wpa_alg alg,
                os_memcpy(&wk.ik_keyrsc, tmp, WPA_KEY_RSC_LEN);
        }
 #else /* WORDS_BIGENDIAN */
-       os_memcpy(&wk.ik_keyrsc, seq, seq_len);
+       if (seq)
+               os_memcpy(&wk.ik_keyrsc, seq, seq_len);
 #endif /* WORDS_BIGENDIAN */
        os_memcpy(wk.ik_keydata, key, key_len);
 
index cd2f61e468a043ad212da0cd80d7fb87544aca82..3abdb6442d7d54bc4a0475b1e2bc68f0c15629b6 100644 (file)
@@ -128,7 +128,7 @@ static int wpa_ndiswrapper_set_key(const char *ifname, void *priv,
        wpa_key.addr = addr;
        wpa_key.key_index = key_idx;
        wpa_key.set_tx = set_tx;
-       wpa_key.seq = seq;
+       wpa_key.seq = seq ? seq : (u8 *) "";
        wpa_key.seq_len = seq_len;
        wpa_key.key = key;
        wpa_key.key_len = key_len;
index 6658e5355cb64e550fab15320735f33beb656817..18bb39580441b3666e7f284090e9447234bb1763 100644 (file)
@@ -134,7 +134,7 @@ int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
                set = 1;
                wpa_drv_set_key(wpa_s, WPA_ALG_WEP,
                                (u8 *) "\xff\xff\xff\xff\xff\xff",
-                               i, i == ssid->wep_tx_keyidx, (u8 *) "", 0,
+                               i, i == ssid->wep_tx_keyidx, NULL, 0,
                                ssid->wep_key[i], ssid->wep_key_len[i]);
        }
 
index 4af0cd0327440932b63169b0d855389dcc286d5a..607f44b0f6c63307d1e89d8c2345d738661794c7 100644 (file)
@@ -212,7 +212,7 @@ static int wpa_eapol_set_wep_key(void *ctx, int unicast, int keyidx,
        return wpa_drv_set_key(wpa_s, WPA_ALG_WEP,
                               unicast ? wpa_s->bssid :
                               (u8 *) "\xff\xff\xff\xff\xff\xff",
-                              keyidx, unicast, (u8 *) "", 0, key, keylen);
+                              keyidx, unicast, NULL, 0, key, keylen);
 }