mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-26 18:59:22 +01:00
ap: Don't use L_AUTO_FREE_VAR with l_settings
L_AUTO_FREE_VAR only causes l_free to be called on the variable that is freed and may leak the rest of the l_settings object's memory.
This commit is contained in:
parent
c660feadf1
commit
fd934aa39e
22
src/ap.c
22
src/ap.c
@ -2544,8 +2544,8 @@ static int ap_load_profile_and_dhcp(struct ap_state *ap, bool *wait_dhcp)
|
|||||||
{
|
{
|
||||||
uint32_t ifindex = netdev_get_ifindex(ap->netdev);
|
uint32_t ifindex = netdev_get_ifindex(ap->netdev);
|
||||||
char *passphrase;
|
char *passphrase;
|
||||||
L_AUTO_FREE_VAR(struct l_settings *, settings) = NULL;
|
struct l_settings *settings = NULL;
|
||||||
int err;
|
int err = -EINVAL;
|
||||||
|
|
||||||
/* No profile or DHCP settings */
|
/* No profile or DHCP settings */
|
||||||
if (!ap->config->profile && !pool.used)
|
if (!ap->config->profile && !pool.used)
|
||||||
@ -2555,7 +2555,7 @@ static int ap_load_profile_and_dhcp(struct ap_state *ap, bool *wait_dhcp)
|
|||||||
settings = l_settings_new();
|
settings = l_settings_new();
|
||||||
|
|
||||||
if (!l_settings_load_from_file(settings, ap->config->profile))
|
if (!l_settings_load_from_file(settings, ap->config->profile))
|
||||||
return -EINVAL;
|
goto cleanup;
|
||||||
|
|
||||||
passphrase = l_settings_get_string(settings, "Security",
|
passphrase = l_settings_get_string(settings, "Security",
|
||||||
"Passphrase");
|
"Passphrase");
|
||||||
@ -2564,7 +2564,7 @@ static int ap_load_profile_and_dhcp(struct ap_state *ap, bool *wait_dhcp)
|
|||||||
l_error("[Security].Passphrase must not exceed "
|
l_error("[Security].Passphrase must not exceed "
|
||||||
"63 characters");
|
"63 characters");
|
||||||
l_free(passphrase);
|
l_free(passphrase);
|
||||||
return -EINVAL;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(ap->config->passphrase, passphrase);
|
strcpy(ap->config->passphrase, passphrase);
|
||||||
@ -2573,7 +2573,8 @@ static int ap_load_profile_and_dhcp(struct ap_state *ap, bool *wait_dhcp)
|
|||||||
|
|
||||||
if (!l_settings_has_group(settings, "IPv4")) {
|
if (!l_settings_has_group(settings, "IPv4")) {
|
||||||
*wait_dhcp = false;
|
*wait_dhcp = false;
|
||||||
return 0;
|
err = 0;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2587,21 +2588,22 @@ static int ap_load_profile_and_dhcp(struct ap_state *ap, bool *wait_dhcp)
|
|||||||
|
|
||||||
if (!ap->rtnl_add_cmd) {
|
if (!ap->rtnl_add_cmd) {
|
||||||
l_error("Failed to add IPv4 address");
|
l_error("Failed to add IPv4 address");
|
||||||
return -EIO;
|
err = -EIO;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ap->cleanup_ip = true;
|
ap->cleanup_ip = true;
|
||||||
|
|
||||||
*wait_dhcp = true;
|
*wait_dhcp = true;
|
||||||
|
err = 0;
|
||||||
return 0;
|
|
||||||
/* Selected address already set, continue normally */
|
/* Selected address already set, continue normally */
|
||||||
} else if (err == -EALREADY) {
|
} else if (err == -EALREADY) {
|
||||||
*wait_dhcp = false;
|
*wait_dhcp = false;
|
||||||
|
err = 0;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
l_settings_free(settings);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user