]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net/dns_resolver: use kasprintf + kmemdup_nul to simplify dns_query
authorThorsten Blum <thorsten.blum@linux.dev>
Tue, 2 Jun 2026 07:13:41 +0000 (09:13 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 5 Jun 2026 01:39:29 +0000 (18:39 -0700)
Use kasprintf() for descriptions with a query type and kmemdup_nul()
otherwise to simplify dns_query().

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260602071343.962830-2-thorsten.blum@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/dns_resolver/dns_query.c

index c250d82cad9650cecc2fe79e8667a97d663d3363..14bee83cbe22e61881419de99715f2d9d600e359 100644 (file)
@@ -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);