From: Eric Sesterhenn Signed-off-by: Eric Sesterhenn Signed-off-by: Alexey Dobriyan Acked-By: David Howells Signed-off-by: Andrew Morton --- security/keys/key.c | 4 +--- security/keys/keyring.c | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff -puN security/keys/key.c~security-keys-user-kmemdup security/keys/key.c --- a/security/keys/key.c~security-keys-user-kmemdup +++ a/security/keys/key.c @@ -290,11 +290,9 @@ struct key *key_alloc(struct key_type *t goto no_memory_2; if (desc) { - key->description = kmalloc(desclen, GFP_KERNEL); + key->description = kmemdup(desc, desclen, GFP_KERNEL); if (!key->description) goto no_memory_3; - - memcpy(key->description, desc, desclen); } atomic_set(&key->usage, 1); diff -puN security/keys/keyring.c~security-keys-user-kmemdup security/keys/keyring.c --- a/security/keys/keyring.c~security-keys-user-kmemdup +++ a/security/keys/keyring.c @@ -706,12 +706,10 @@ int __key_link(struct key *keyring, stru BUG_ON(size > PAGE_SIZE); ret = -ENOMEM; - nklist = kmalloc(size, GFP_KERNEL); + nklist = kmemdup(klist, size, GFP_KERNEL); if (!nklist) goto error2; - memcpy(nklist, klist, size); - /* replace matched key */ atomic_inc(&key->usage); nklist->keys[loop] = key; _