KEYS: use kmemdup() in request_key_auth_new()
authorEric Biggers <ebiggers@google.com>
Thu, 21 Sep 2017 20:57:42 +0000 (13:57 -0700)
committerDavid Howells <dhowells@redhat.com>
Mon, 25 Sep 2017 14:19:57 +0000 (15:19 +0100)
kmemdup() is preferred to kmalloc() followed by memcpy().

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
security/keys/request_key_auth.c

index e356075ed2f81efced4a722d17ff282b4fdc0a36..6ebf1af8fce963eeb0cc4c423c153318096e65a6 100644 (file)
@@ -163,9 +163,10 @@ struct key *request_key_auth_new(struct key *target, const void *callout_info,
        rka = kzalloc(sizeof(*rka), GFP_KERNEL);
        if (!rka)
                goto error;
-       rka->callout_info = kmalloc(callout_len, GFP_KERNEL);
+       rka->callout_info = kmemdup(callout_info, callout_len, GFP_KERNEL);
        if (!rka->callout_info)
                goto error_free_rka;
+       rka->callout_len = callout_len;
 
        /* see if the calling process is already servicing the key request of
         * another process */
@@ -196,8 +197,6 @@ struct key *request_key_auth_new(struct key *target, const void *callout_info,
 
        rka->target_key = key_get(target);
        rka->dest_keyring = key_get(dest_keyring);
-       memcpy(rka->callout_info, callout_info, callout_len);
-       rka->callout_len = callout_len;
 
        /* allocate the auth key */
        sprintf(desc, "%x", target->serial);