Browse Source

Reset EAPOL pointer when handling DBus smartcard parameters

Smartcard parameter update via DBus ended up re-initializing the EAPOL
state machine without updating the pointer inside WPA state machine.
This can trigger a segfault when EAP layer attempts to use the old
reference. Fix this by re-initializing the pointer inside WPA state
machine.
David Smith 15 years ago
parent
commit
d7199342f0
1 changed files with 4 additions and 0 deletions
  1. 4 0
      wpa_supplicant/ctrl_iface_dbus_handlers.c

+ 4 - 0
wpa_supplicant/ctrl_iface_dbus_handlers.c

@@ -27,6 +27,7 @@
 #include "wpas_glue.h"
 #include "eapol_supp/eapol_supp_sm.h"
 #include "wps_supplicant.h"
+#include "wpa.h"
 
 extern int wpa_debug_level;
 extern int wpa_debug_show_keys;
@@ -1270,8 +1271,11 @@ DBusMessage * wpas_dbus_iface_set_smartcard_modules(
 	wpa_s->conf->pkcs11_module_path = pkcs11_module_path;
 #endif /* EAP_TLS_OPENSSL */
 
+	wpa_sm_set_eapol(wpa_s->wpa, NULL);
 	eapol_sm_deinit(wpa_s->eapol);
+	wpa_s->eapol = NULL;
 	wpa_supplicant_init_eapol(wpa_s);
+	wpa_sm_set_eapol(wpa_s->wpa, wpa_s->eapol);
 
 	return wpas_dbus_new_success_reply(message);