hostapd: Fix multi-BSS configuration file parsing regression
authorJouni Malinen <j@w1.fi>
Sun, 3 Nov 2013 18:01:50 +0000 (20:01 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 3 Nov 2013 18:01:50 +0000 (20:01 +0200)
Commit ebd79f07c47b02b71c0ac7744a6a94a2bae92fcf broke parsing of
configuration files that use the bss parameter to specify another BSS
entry. This resulted in crashing the process with NULL pointer
dereference since the new hostapd_config::bss design requires this
function to allocate a new hostapd_bss_config structure.

Signed-hostap: Jouni Malinen <j@w1.fi>

hostapd/config_file.c

index 501aa4a..ef0d647 100644 (file)
@@ -762,16 +762,18 @@ static int hostapd_config_bss(struct hostapd_config *conf, const char *ifname)
        }
        conf->bss = all;
 
-       bss = conf->bss[conf->num_bss];
-       os_memset(bss, 0, sizeof(*bss));
+       bss = os_zalloc(sizeof(*bss));
+       if (bss == NULL)
+               return -1;
        bss->radius = os_zalloc(sizeof(*bss->radius));
        if (bss->radius == NULL) {
                wpa_printf(MSG_ERROR, "Failed to allocate memory for "
                           "multi-BSS RADIUS data");
+               os_free(bss);
                return -1;
        }
 
-       conf->num_bss++;
+       conf->bss[conf->num_bss++] = bss;
        conf->last_bss = bss;
 
        hostapd_config_defaults_bss(bss);