aboutsummaryrefslogtreecommitdiffstats
path: root/src/eap_common
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2014-07-02 10:32:10 -0700
committerDmitry Shmidt <dimitrysh@google.com>2014-07-02 10:32:10 -0700
commitc28170251eb54dbf64a9074a07fee377587425b2 (patch)
treeebbb5127648c86a789a927e5ef3e47acde4bddad /src/eap_common
parentd30ac604c9f6da71a0dd7f46d25be05a2a62cfbb (diff)
downloadandroid_external_wpa_supplicant_8-c28170251eb54dbf64a9074a07fee377587425b2.tar.gz
android_external_wpa_supplicant_8-c28170251eb54dbf64a9074a07fee377587425b2.tar.bz2
android_external_wpa_supplicant_8-c28170251eb54dbf64a9074a07fee377587425b2.zip
Cumulative patch from commit e376290c667e970d751acc916e0efe2ed16292ed
e376290 HS 2.0R2: Add update_identifier field to network 5bc2857 Fix some sparse warnings about u16 vs. le16 42619d6 Fix CTRL-EVENT-REGDOM-CHANGE event init= value a520bf4 Mark function static 0cb79d3 dbus: Fix indentation level to match code logic 8f03ac9 Mark functions static 6891f0e Allow SCAN command to specify scan_ssid=1 SSIDs 18389ab WPS: Clear keys/PINs explicitly b7175b4 Clear hostapd configuration keys explicitly d1ecca6 HS 2.0 R2: Clear hs20-osu-client configuration keys explicitly 0a13e06 EAP server: Clear keying material on deinit f534ee0 EAP peer: Clear keying material on deinit 19c48da Clear wpa_supplicant configuration keys explicitly 28bfa29 EAP-AKA: Remove unnecessary dead increment 62493df EAP-GPSK: Avoid dead increment by checking pos pointer 164a453 FT: Debug print extra response data 70bfc77 PCSC: Debug print extra response data 5dbbf36 Interworking: Remove unnecessary dead increment a1e46f3 Check for no key_mgmt/proto/auth_alg entries in config writer 290ea6a Remove unnecessary tracking of first entry d3fa2bb WFD: Explicit limit for subelement length (CID 68127) 745ef18 HS 2.0: Verify assoc_req_ie buffer size for indication elements 0233dca SAE: Use os_memcmp_const() for hash/password comparisons 34ef46c WEP shared key: Use os_memcmp_const() for hash/password comparisons 3e4b77c EAP-GTC: Use os_memcmp_const() for hash/password comparisons a6eae3f EAP-MSCHAPv2: Use os_memcmp_const() for hash/password comparisons 30411b3 EAP-TTLS: Use os_memcmp_const() for hash/password comparisons a564d9c EAP-MD5: Use os_memcmp_const() for hash/password comparisons 4685482 EAP-PSK: Use os_memcmp_const() for hash/password comparisons cba0f86 EAP-PEAP: Use os_memcmp_const() for hash/password comparisons 7b1e745 EAP-LEAP: Use os_memcmp_const() for hash/password comparisons 8f92826 EAP-GPSK: Use os_memcmp_const() for hash/password comparisons e1550d4 EAP-PAX: Use os_memcmp_const() for hash/password comparisons c434503 EAP-FAST: Use os_memcmp_const() for hash/password comparisons dddf7bb EAP-EKE: Use os_memcmp_const() for hash/password comparisons dfb5608 EAP-SAKE: Use os_memcmp_const() for hash/password comparisons 05c79d6 EAP-SIM/AKA: Use os_memcmp_const() for hash/password comparisons 675ddad EAP-IKEv2: Use os_memcmp_const() for hash/password comparisons 2049a3c TLS: Use os_memcmp_const() for hash/password comparisons a79aea5 Milenage: Use os_memcmp_const() for hash/password comparisons 05f916e AES-GCM: Use os_memcmp_const() for hash/password comparisons 87a5c93 AES-CCM: Use os_memcmp_const() for hash/password comparisons 7c24f53 EAPOL supplicant: Use os_memcmp_const() for hash/password comparisons 870834a RSN authenticator: Use os_memcmp_const() for hash/password comparisons 0d15b69 RSN supplicant: Use os_memcmp_const() for hash/password comparisons 72619ce MACsec: Use os_memcmp_const() for hash/password comparisons c237195 RADIUS: Use os_memcmp_const() for hash/password comparisons ce9c9bc WPS: Use os_memcmp_const() for hash/password comparisons afc3c8b Add constant time memory comparison function os_memcmp_const ee352f1 EAP-pwd: Add explicit total length limit b2b8a4c EAP-SIM/AKA: Pass EAP type as argument to eap_sim_msg_finish() f107d00 PeerKey: Clean up EAPOL-Key Key Data processing 010fc5f dbus: Clean up array-array-type property getter Change-Id: I1dbe483be2678a7468e6955d70ea261f8e53b26d Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/eap_common')
-rw-r--r--src/eap_common/eap_eke_common.c2
-rw-r--r--src/eap_common/eap_gpsk_common.c19
-rw-r--r--src/eap_common/eap_ikev2_common.c2
-rw-r--r--src/eap_common/eap_sim_common.c11
-rw-r--r--src/eap_common/eap_sim_common.h3
-rw-r--r--src/eap_common/ikev2_common.c2
6 files changed, 18 insertions, 21 deletions
diff --git a/src/eap_common/eap_eke_common.c b/src/eap_common/eap_eke_common.c
index a62ac8e0..4dfdb3f9 100644
--- a/src/eap_common/eap_eke_common.c
+++ b/src/eap_common/eap_eke_common.c
@@ -692,7 +692,7 @@ int eap_eke_decrypt_prot(struct eap_eke_session *sess,
if (eap_eke_mac(sess->mac, sess->ki, prot + block_size,
prot_len - block_size - icv_len, icv) < 0)
return -1;
- if (os_memcmp(icv, prot + prot_len - icv_len, icv_len) != 0) {
+ if (os_memcmp_const(icv, prot + prot_len - icv_len, icv_len) != 0) {
wpa_printf(MSG_INFO, "EAP-EKE: ICV mismatch in Prot() data");
return -1;
}
diff --git a/src/eap_common/eap_gpsk_common.c b/src/eap_common/eap_gpsk_common.c
index 7a33215f..8c7ae27b 100644
--- a/src/eap_common/eap_gpsk_common.c
+++ b/src/eap_common/eap_gpsk_common.c
@@ -284,7 +284,6 @@ int eap_gpsk_derive_keys(const u8 *psk, size_t psk_len, int vendor,
u8 *pk, size_t *pk_len)
{
u8 *seed, *pos;
- size_t seed_len;
int ret;
wpa_printf(MSG_DEBUG, "EAP-GPSK: Deriving keys (%d:%d)",
@@ -296,8 +295,7 @@ int eap_gpsk_derive_keys(const u8 *psk, size_t psk_len, int vendor,
wpa_hexdump_key(MSG_DEBUG, "EAP-GPSK: PSK", psk, psk_len);
/* Seed = RAND_Peer || ID_Peer || RAND_Server || ID_Server */
- seed_len = 2 * EAP_GPSK_RAND_LEN + id_server_len + id_peer_len;
- seed = os_malloc(seed_len);
+ seed = os_malloc(2 * EAP_GPSK_RAND_LEN + id_server_len + id_peer_len);
if (seed == NULL) {
wpa_printf(MSG_DEBUG, "EAP-GPSK: Failed to allocate memory "
"for key derivation");
@@ -313,17 +311,18 @@ int eap_gpsk_derive_keys(const u8 *psk, size_t psk_len, int vendor,
pos += EAP_GPSK_RAND_LEN;
os_memcpy(pos, id_server, id_server_len);
pos += id_server_len;
- wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Seed", seed, seed_len);
+ wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Seed", seed, pos - seed);
switch (specifier) {
case EAP_GPSK_CIPHER_AES:
- ret = eap_gpsk_derive_keys_aes(psk, psk_len, seed, seed_len,
+ ret = eap_gpsk_derive_keys_aes(psk, psk_len, seed, pos - seed,
msk, emsk, sk, sk_len,
pk, pk_len);
break;
#ifdef EAP_GPSK_SHA256
case EAP_GPSK_CIPHER_SHA256:
- ret = eap_gpsk_derive_keys_sha256(psk, psk_len, seed, seed_len,
+ ret = eap_gpsk_derive_keys_sha256(psk, psk_len, seed,
+ pos - seed,
msk, emsk, sk, sk_len);
break;
#endif /* EAP_GPSK_SHA256 */
@@ -423,7 +422,6 @@ int eap_gpsk_derive_session_id(const u8 *psk, size_t psk_len, int vendor,
{
u8 *seed, *pos;
u8 kdf_out[16];
- size_t seed_len;
int ret;
wpa_printf(MSG_DEBUG, "EAP-GPSK: Deriving Session ID(%d:%d)",
@@ -441,8 +439,7 @@ int eap_gpsk_derive_session_id(const u8 *psk, size_t psk_len, int vendor,
* Method-ID = GKDF-16 (zero, "Method ID" || EAP_Method_Type ||
* CSuite_Sel || inputString)
*/
- seed_len = 2 * EAP_GPSK_RAND_LEN + id_server_len + id_peer_len;
- seed = os_malloc(seed_len);
+ seed = os_malloc(2 * EAP_GPSK_RAND_LEN + id_server_len + id_peer_len);
if (seed == NULL) {
wpa_printf(MSG_DEBUG, "EAP-GPSK: Failed to allocate memory "
"for Session-Id derivation");
@@ -458,11 +455,11 @@ int eap_gpsk_derive_session_id(const u8 *psk, size_t psk_len, int vendor,
pos += EAP_GPSK_RAND_LEN;
os_memcpy(pos, id_server, id_server_len);
pos += id_server_len;
- wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Seed", seed, seed_len);
+ wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Seed", seed, pos - seed);
ret = eap_gpsk_derive_mid_helper(specifier,
kdf_out, sizeof(kdf_out),
- psk, seed, seed_len,
+ psk, seed, pos - seed,
method_type);
sid[0] = method_type;
diff --git a/src/eap_common/eap_ikev2_common.c b/src/eap_common/eap_ikev2_common.c
index da9f3cc5..585c79c4 100644
--- a/src/eap_common/eap_ikev2_common.c
+++ b/src/eap_common/eap_ikev2_common.c
@@ -100,7 +100,7 @@ int eap_ikev2_validate_icv(int integ_alg, struct ikev2_keys *keys,
return -1;
}
- if (os_memcmp(icv, end - icv_len, icv_len) != 0) {
+ if (os_memcmp_const(icv, end - icv_len, icv_len) != 0) {
wpa_printf(MSG_INFO, "EAP-IKEV2: Invalid ICV");
wpa_hexdump(MSG_DEBUG, "EAP-IKEV2: Calculated ICV",
icv, icv_len);
diff --git a/src/eap_common/eap_sim_common.c b/src/eap_common/eap_sim_common.c
index ae021858..2adc3b37 100644
--- a/src/eap_common/eap_sim_common.c
+++ b/src/eap_common/eap_sim_common.c
@@ -198,7 +198,7 @@ int eap_sim_verify_mac(const u8 *k_aut, const struct wpabuf *req,
hmac, EAP_SIM_MAC_LEN);
os_free(tmp);
- return (os_memcmp(hmac, mac, EAP_SIM_MAC_LEN) == 0) ? 0 : 1;
+ return (os_memcmp_const(hmac, mac, EAP_SIM_MAC_LEN) == 0) ? 0 : 1;
}
@@ -393,7 +393,7 @@ int eap_sim_verify_mac_sha256(const u8 *k_aut, const struct wpabuf *req,
hmac, EAP_SIM_MAC_LEN);
os_free(tmp);
- return (os_memcmp(hmac, mac, EAP_SIM_MAC_LEN) == 0) ? 0 : 1;
+ return (os_memcmp_const(hmac, mac, EAP_SIM_MAC_LEN) == 0) ? 0 : 1;
}
@@ -972,7 +972,6 @@ u8 * eap_sim_parse_encr(const u8 *k_encr, const u8 *encr_data,
struct eap_sim_msg {
struct wpabuf *buf;
size_t mac, iv, encr; /* index from buf */
- int type;
};
@@ -986,7 +985,6 @@ struct eap_sim_msg * eap_sim_msg_init(int code, int id, int type, int subtype)
if (msg == NULL)
return NULL;
- msg->type = type;
msg->buf = wpabuf_alloc(EAP_SIM_INIT_LEN);
if (msg->buf == NULL) {
os_free(msg);
@@ -1006,7 +1004,8 @@ struct eap_sim_msg * eap_sim_msg_init(int code, int id, int type, int subtype)
}
-struct wpabuf * eap_sim_msg_finish(struct eap_sim_msg *msg, const u8 *k_aut,
+struct wpabuf * eap_sim_msg_finish(struct eap_sim_msg *msg, int type,
+ const u8 *k_aut,
const u8 *extra, size_t extra_len)
{
struct eap_hdr *eap;
@@ -1019,7 +1018,7 @@ struct wpabuf * eap_sim_msg_finish(struct eap_sim_msg *msg, const u8 *k_aut,
eap->length = host_to_be16(wpabuf_len(msg->buf));
#if defined(EAP_AKA_PRIME) || defined(EAP_SERVER_AKA_PRIME)
- if (k_aut && msg->mac && msg->type == EAP_TYPE_AKA_PRIME) {
+ if (k_aut && msg->mac && type == EAP_TYPE_AKA_PRIME) {
eap_sim_add_mac_sha256(k_aut, (u8 *) wpabuf_head(msg->buf),
wpabuf_len(msg->buf),
(u8 *) wpabuf_mhead(msg->buf) +
diff --git a/src/eap_common/eap_sim_common.h b/src/eap_common/eap_sim_common.h
index 6021bd2e..daeb0e2d 100644
--- a/src/eap_common/eap_sim_common.h
+++ b/src/eap_common/eap_sim_common.h
@@ -211,7 +211,8 @@ u8 * eap_sim_parse_encr(const u8 *k_encr, const u8 *encr_data,
struct eap_sim_msg;
struct eap_sim_msg * eap_sim_msg_init(int code, int id, int type, int subtype);
-struct wpabuf * eap_sim_msg_finish(struct eap_sim_msg *msg, const u8 *k_aut,
+struct wpabuf * eap_sim_msg_finish(struct eap_sim_msg *msg, int type,
+ const u8 *k_aut,
const u8 *extra, size_t extra_len);
void eap_sim_msg_free(struct eap_sim_msg *msg);
u8 * eap_sim_msg_add_full(struct eap_sim_msg *msg, u8 attr,
diff --git a/src/eap_common/ikev2_common.c b/src/eap_common/ikev2_common.c
index b98a3e8e..3d4fb6f9 100644
--- a/src/eap_common/ikev2_common.c
+++ b/src/eap_common/ikev2_common.c
@@ -477,7 +477,7 @@ u8 * ikev2_decrypt_payload(int encr_id, int integ_id,
"hash");
return NULL;
}
- if (os_memcmp(integ, hash, integ_alg->hash_len) != 0) {
+ if (os_memcmp_const(integ, hash, integ_alg->hash_len) != 0) {
wpa_printf(MSG_INFO, "IKEV2: Incorrect Integrity Checksum "
"Data");
return NULL;