Fix memory leaks on wpa_config_parse_string() error paths
authorJouni Malinen <jouni@qca.qualcomm.com>
Tue, 11 Mar 2014 20:41:12 +0000 (22:41 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 11 Mar 2014 23:09:21 +0000 (01:09 +0200)
hostapd configuration parser did not free the temporary buffer on some
error paths.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
hostapd/config_file.c

index 548cb9a..eb096db 100644 (file)
@@ -1679,6 +1679,7 @@ static int hs20_parse_osu_ssid(struct hostapd_bss_config *bss,
        str = wpa_config_parse_string(pos, &slen);
        if (str == NULL || slen < 1 || slen > HOSTAPD_MAX_SSID_LEN) {
                wpa_printf(MSG_ERROR, "Line %d: Invalid SSID '%s'", line, pos);
+               os_free(str);
                return -1;
        }
 
@@ -1893,12 +1894,12 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                if (str == NULL || slen < 1 || slen > HOSTAPD_MAX_SSID_LEN) {
                        wpa_printf(MSG_ERROR, "Line %d: invalid SSID '%s'",
                                   line, pos);
+                       os_free(str);
                        return 1;
-               } else {
-                       os_memcpy(bss->ssid.ssid, str, slen);
-                       bss->ssid.ssid_len = slen;
-                       bss->ssid.ssid_set = 1;
                }
+               os_memcpy(bss->ssid.ssid, str, slen);
+               bss->ssid.ssid_len = slen;
+               bss->ssid.ssid_set = 1;
                os_free(str);
        } else if (os_strcmp(buf, "utf8_ssid") == 0) {
                bss->ssid.utf8_ssid = atoi(pos) > 0;