Re: gssd: fix memory leak in gssd_free_client

Steve Dickson <[email protected]> Thu, 23 Jul 2026 08:26:34 -0400
Newsgroups org.kernel.vger.linux-nfs
Message-ID <[email protected]>

On 7/14/26 4:42 AM, zhangjian (CG) wrote:
> clp->servername is always not null, so upcall_* is never free.
> 
> Signed-off-by: zhangjian <[email protected]>
Committed... (tag: nfs-utils-2-9-2-rc6)

steved.
> ---
>   utils/gssd/gssd.c | 24 ++++++++++++++----------
>   1 file changed, 14 insertions(+), 10 deletions(-)
> 
> diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
> index 1c901991..bad92321 100644
> --- a/utils/gssd/gssd.c
> +++ b/utils/gssd/gssd.c
> @@ -360,6 +360,10 @@ gssd_read_service_info(int dirfd, struct clnt_info *clp)
>   	clp->prog = program;
>   	clp->vers = version;
>   	clp->protocol = protoname;
> +	clp->upcall_address = NULL;
> +	clp->upcall_port = NULL;
> +	clp->upcall_protoname = NULL;
> +	clp->upcall_service = NULL;
>   
>   	goto out;
>   
> @@ -414,16 +418,16 @@ gssd_free_client(struct clnt_info *clp)
>   	free(clp->servicename);
>   	free(clp->servername);
>   	free(clp->protocol);
> -	if (!clp->servername) {
> -		if (clp->upcall_address)
> -			free(clp->upcall_address);
> -		if (clp->upcall_port)
> -			free(clp->upcall_port);
> -		if (clp->upcall_protoname)
> -			free(clp->upcall_protoname);
> -		if (clp->upcall_service)
> -			free(clp->upcall_service);
> -	}
> +
> +	if (clp->upcall_address)
> +		free(clp->upcall_address);
> +	if (clp->upcall_port)
> +		free(clp->upcall_port);
> +	if (clp->upcall_protoname)
> +		free(clp->upcall_protoname);
> +	if (clp->upcall_service)
> +		free(clp->upcall_service);
> +
>   	free(clp);
>   }
>