RE: [PATCH] proc: fold kmalloc() + strcpy() into kmemdup()
From: David Laight
Date: Mon Sep 09 2024 - 11:14:18 EST
From: Alexey Dobriyan
> Sent: 08 September 2024 10:28
>
> strcpy() will recalculate string length second time which is
> unnecessary in this case.
There is also definitely scope for the string being changed.
Maybe you can prove it doesn't happen?
Which also means the code would be better explicitly writing
the terminating '\0' rather than relying on the one from the
input buffer.
David
>
> Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx>
> ---
>
> fs/proc/generic.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> --- a/fs/proc/generic.c
> +++ b/fs/proc/generic.c
> @@ -464,9 +464,9 @@ struct proc_dir_entry *proc_symlink(const char *name,
> (S_IFLNK | S_IRUGO | S_IWUGO | S_IXUGO),1);
>
> if (ent) {
> - ent->data = kmalloc((ent->size=strlen(dest))+1, GFP_KERNEL);
> + ent->size = strlen(dest);
> + ent->data = kmemdup(dest, ent->size + 1, GFP_KERNEL);
> if (ent->data) {
> - strcpy((char*)ent->data,dest);
> ent->proc_iops = &proc_link_inode_operations;
> ent = proc_register(parent, ent);
> } else {
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)