From: Jouni Malinen Date: Sat, 26 Apr 2014 08:39:48 +0000 (+0300) Subject: Fix wpa_config_read() with existing config block X-Git-Tag: hostap_2_2~235 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b89962b4b94a381bf29e5763c42c8a52812d6a25;p=thirdparty%2Fhostap.git Fix wpa_config_read() with existing config block If two config files are merged together, the ssid and cred blocks may not have been processed correctly since the tail pointers were not updated to the last entry from the first configuration file. Signed-off-by: Jouni Malinen --- diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c index 8d59f4967..384294675 100644 --- a/wpa_supplicant/config_file.c +++ b/wpa_supplicant/config_file.c @@ -352,8 +352,8 @@ struct wpa_config * wpa_config_read(const char *name, struct wpa_config *cfgp) FILE *f; char buf[512], *pos; int errors = 0, line = 0; - struct wpa_ssid *ssid, *tail = NULL, *head = NULL; - struct wpa_cred *cred, *cred_tail = NULL, *cred_head = NULL; + struct wpa_ssid *ssid, *tail, *head; + struct wpa_cred *cred, *cred_tail, *cred_head; struct wpa_config *config; int id = 0; int cred_id = 0; @@ -369,8 +369,12 @@ struct wpa_config * wpa_config_read(const char *name, struct wpa_config *cfgp) "structure"); return NULL; } - head = config->ssid; - cred_head = config->cred; + tail = head = config->ssid; + while (tail && tail->next) + tail = tail->next; + cred_tail = cred_head = config->cred; + while (cred_tail && cred_tail->next) + cred_tail = cred_tail->next; wpa_printf(MSG_DEBUG, "Reading configuration file '%s'", name); f = fopen(name, "r");