WPS: Remove old duplicate network even if key is different

Previously, WPS credential provisioning removed duplicated network
entries only if they had identicical SSID, security parameters, and the
keys. However, it is possible that the AP has changes its keys and
leaving the old entry behind can result in connectibity issues (e.g.,
with 4-way handshake failing due to use of the old PSK). Fix this by
allowing the old network entry to be removed even if the keys
(passphrase, PSK, WEP keys) are different.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2013-11-29 14:56:11 +02:00 committed by Jouni Malinen
parent 9d2cb3ec94
commit c511b321f3

View file

@ -260,31 +260,6 @@ static void wpas_wps_remove_dup_network(struct wpa_supplicant *wpa_s,
ssid->group_cipher != new_ssid->group_cipher) ssid->group_cipher != new_ssid->group_cipher)
continue; continue;
if (ssid->passphrase && new_ssid->passphrase) {
if (os_strlen(ssid->passphrase) !=
os_strlen(new_ssid->passphrase))
continue;
if (os_strcmp(ssid->passphrase, new_ssid->passphrase) !=
0)
continue;
} else if (ssid->passphrase || new_ssid->passphrase)
continue;
if ((ssid->psk_set || new_ssid->psk_set) &&
os_memcmp(ssid->psk, new_ssid->psk, sizeof(ssid->psk)) != 0)
continue;
if (ssid->auth_alg == WPA_ALG_WEP) {
if (ssid->wep_tx_keyidx != new_ssid->wep_tx_keyidx)
continue;
if (os_memcmp(ssid->wep_key, new_ssid->wep_key,
sizeof(ssid->wep_key)))
continue;
if (os_memcmp(ssid->wep_key_len, new_ssid->wep_key_len,
sizeof(ssid->wep_key_len)))
continue;
}
/* Remove the duplicated older network entry. */ /* Remove the duplicated older network entry. */
wpa_printf(MSG_DEBUG, "Remove duplicate network %d", ssid->id); wpa_printf(MSG_DEBUG, "Remove duplicate network %d", ssid->id);
wpas_notify_network_removed(wpa_s, ssid); wpas_notify_network_removed(wpa_s, ssid);