Subject: Re: [PATCH net-next v2] net/dns_resolver: use kasprintf + kmemdup_nul to simplify dns_query

From: David Laight <[email-masked]>
Date: Thu, 4 Jun 2026 15:19:25 +0100

On Tue,  2 Jun 2026 09:13:41 +0200
Thorsten Blum <[email-masked]> wrote:

> Use kasprintf() for descriptions with a query type and kmemdup_nul()
> otherwise to simplify dns_query().

It'll be a lot slower - if that matters.

-- David

> 
> Signed-off-by: Thorsten Blum <[email-masked]>
> ---
> Changes in v2:
> - Reverse xmas tree (Jakub)
> - v1: https://lore.kernel.org/lkml/[email-masked]/
> ---
>  net/dns_resolver/dns_query.c | 33 ++++++++-------------------------
>  1 file changed, 8 insertions(+), 25 deletions(-)
> 
> diff --git a/net/dns_resolver/dns_query.c b/net/dns_resolver/dns_query.c
> index c250d82cad96..14bee83cbe22 100644
> --- a/net/dns_resolver/dns_query.c
> +++ b/net/dns_resolver/dns_query.c
> @@ -64,44 +64,27 @@ int dns_query(struct net *net,
>  	      const char *options, char **_result, time64_t *_expiry,
>  	      bool invalidate)
>  {
> -	struct key *rkey;
>  	struct user_key_payload *upayload;
> -	size_t typelen, desclen;
> -	char *desc, *cp;
> +	struct key *rkey;
>  	int ret, len;
> +	char *desc;
>  
>  	kenter("%s,%*.*s,%zu,%s",
>  	       type, (int)namelen, (int)namelen, name, namelen, options);
>  
>  	if (!name || namelen < 3 || namelen > 255)
>  		return -EINVAL;
> +	if (type && *type == '\0')
> +		return -EINVAL;
>  
>  	/* construct the query key description as "[<type>:]<name>" */
> -	typelen = 0;
> -	desclen = 0;
> -	if (type) {
> -		typelen = strlen(type);
> -		if (typelen < 1)
> -			return -EINVAL;
> -		desclen += typelen + 1;
> -	}
> -
> -	desclen += namelen + 1;
> -
> -	desc = kmalloc(desclen, GFP_KERNEL);
> +	if (type)
> +		desc = kasprintf(GFP_KERNEL, "%s:%.*s", type, (int)namelen, name);
> +	else
> +		desc = kmemdup_nul(name, namelen, GFP_KERNEL);
>  	if (!desc)
>  		return -ENOMEM;
>  
> -	cp = desc;
> -	if (type) {
> -		memcpy(cp, type, typelen);
> -		cp += typelen;
> -		*cp++ = ':';
> -	}
> -	memcpy(cp, name, namelen);
> -	cp += namelen;
> -	*cp = '\0';
> -
>  	if (!options)
>  		options = "";
>  	kdebug("call request_key(,%s,%s)", desc, options);
>