[Dnsmasq-discuss] [PATCH] Fix DHCPv6 options memory leaks

Simon Kelley simon at thekelleys.org.uk
Sun Oct 1 22:37:04 UTC 2023


Patch applied. The problem is clear and the fix is good.

https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=d16b995756dc079b1fdc2e63665793979f766a26

Thanks for your contribution.

Cheers,

Simon.


On 28/09/2023 09:28, renmingshuai via Dnsmasq-discuss wrote:
> When I repeatedly reloaded the dnsmasq process, I found a memory leak. 
> To reproduce the problem, perform the following steps:
> 
> (1)Run dnsmasq as follows:
> 
> # dnsmasq --no-hosts --no-resolv --dhcp-optsfile=/tmp/opts 
> --dhcp-range=set:subnet-368e344f-8862-46f5-897e-02602d2e0eaa,2003:0:0:1499::,static,64,2h
> 
> # cat /tmp/opts
> 
> tag:subnet-368e344f-8862-46f5-897e-02602d2e0eaa,option6:domain-search,openstacklocal
> 
> tag:subnet-368e344f-8862-46f5-897e-02602d2e0eaa,option6:dns-server,[2003:0:0:1499::2],[2003:0:0:1499::3]
> 
> (2) Send SIGHUP to dnsmasq repeatedly
> 
> # cat send.sh
> 
> #!/bin/bash
> 
> while true
> 
> do
> 
>         kill -HUP `pidof dnsmasq`
> 
>         sleep
> 
> done
> 
> # sh send.sh
> 
> After a period of time, the vmRss value of the dnsmasq process keeps 
> increasing.
> 
> # date
> 
> Fri Sep 29 12:43:27 AM CST 2023
> 
> [root at localhost home]# ps -aux|grep dnsmasq
> 
> dnsmasq  3322571  0.0  0.0   9044  2456 ?        S    00:43   0:00 
> dnsmasq --no-hosts --no-resolv --dhcp-optsfile=/tmp/opts 
> --dhcp-range=set:subnet-368e344f-8862-46f5-897e-02602d2e0eaa,2003:0:0:1499::,static,64,infinite
> 
> # date
> 
> Fri Sep 29 01:09:28 AM CST 2023
> 
> # ps -aux|grep dnsmasq
> 
> dnsmasq  3322571  0.1  0.0   9772  3280 ?        S    00:43   0:02 
> dnsmasq --no-hosts --no-resolv --dhcp-optsfile=/tmp/opts 
> --dhcp-range=set:subnet-368e344f-8862-46f5-897e-02602d2e0eaa,2003:0:0:1499::,static,64,infinite
> 
> When we configure DHCPv6 option information by using –dhcp-optsfile, 
> dnsmasq process allocates memory to store those information. However, 
> when dnsmasq receives SIGHUP and reread the –dhcp-optsfile, it does not 
> release the memory that store DHCPv6 options information as it does for 
> DHCPv4 options.
> 
> The following patch could fix this problem.
> 
> ---
> 
> src/option.c | 12 ++++++++++--
> 
> 1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/src/option.c b/src/option.c
> 
> index 8322725..1cf2796 100644
> 
> --- a/src/option.c
> 
> +++ b/src/option.c
> 
> @@ -5734,11 +5734,11 @@ static void clear_dynamic_conf(void)
> 
>       }
> 
> }
> 
> -static void clear_dynamic_opt(void)
> 
> +static void clear_dhcp_opt(struct dhcp_opt **dhcp_opts)
> 
> {
> 
>     struct dhcp_opt *opts, *cp, **up;
> 
> -  for (up = &daemon->dhcp_opts, opts = daemon->dhcp_opts; opts; opts = cp)
> 
> +  for (up = dhcp_opts, opts = *dhcp_opts; opts; opts = cp)
> 
>       {
> 
>         cp = opts->next;
> 
> @@ -5752,6 +5752,14 @@ static void clear_dynamic_opt(void)
> 
>       }
> 
> }
> 
> +static void clear_dynamic_opt(void)
> 
> +{
> 
> +  clear_dhcp_opt(&daemon->dhcp_opts);
> 
> +#ifdef HAVE_DHCP6
> 
> +  clear_dhcp_opt(&daemon->dhcp_opts6);
> 
> +#endif
> 
> +}
> 
> +
> 
> void reread_dhcp(void)
> 
> {
> 
>      struct hostsfile *hf;
> 
> --
> 
> 2.33.0
> 
> 
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss



More information about the Dnsmasq-discuss mailing list