mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix potential memory leak
When a new IPv6 address is being added to a dhcp_config struct, if there is anything invalid regarding the prefix it looks like there is a potential memory leak. ret_err_free() should be used to free it. Also, the new addrlist struct is being linked into the existing addr6 list in the dhcp_config before the validity check, it is best to defer this insertion until later so an invalid entry is not present, since the CONFIG_ADDR6 flag might not have been set yet. Signed-off-by: Brian Haley <haleyb.dev@gmail.com>
This commit is contained in:
committed by
Simon Kelley
parent
6dbdf16fd1
commit
efb8f10450
@@ -4043,10 +4043,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
||||
}
|
||||
|
||||
new_addr = opt_malloc(sizeof(struct addrlist));
|
||||
new_addr->next = new->addr6;
|
||||
new_addr->flags = 0;
|
||||
new_addr->addr.addr6 = in6;
|
||||
new->addr6 = new_addr;
|
||||
|
||||
if (pref)
|
||||
{
|
||||
@@ -4057,7 +4055,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
||||
((((u64)1<<(128-new_addr->prefixlen))-1) & addrpart) != 0)
|
||||
{
|
||||
dhcp_config_free(new);
|
||||
ret_err(_("bad IPv6 prefix"));
|
||||
ret_err_free(_("bad IPv6 prefix"), new_addr);
|
||||
}
|
||||
|
||||
new_addr->flags |= ADDRLIST_PREFIX;
|
||||
@@ -4071,6 +4069,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
||||
if (i == 8)
|
||||
new_addr->flags |= ADDRLIST_WILDCARD;
|
||||
|
||||
new_addr->next = new->addr6;
|
||||
new->addr6 = new_addr;
|
||||
new->flags |= CONFIG_ADDR6;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user