ovl: use kvalloc in xattr copy-up
authorMiklos Szeredi <mszeredi@redhat.com>
Thu, 22 Jul 2021 12:18:14 +0000 (14:18 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Tue, 17 Aug 2021 09:47:45 +0000 (11:47 +0200)
Extended attributes are usually small, but could be up to 64k in size, so
use the most efficient method for doing the allocation.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/copy_up.c

index 9d8ebf0e72375af8acf3786678e470f8c786f594..4e7d5bfa2949f6b7eb30198a8205d6458d1d7bb2 100644 (file)
@@ -63,7 +63,7 @@ int ovl_copy_xattr(struct super_block *sb, struct dentry *old,
                return list_size;
        }
 
-       buf = kzalloc(list_size, GFP_KERNEL);
+       buf = kvzalloc(list_size, GFP_KERNEL);
        if (!buf)
                return -ENOMEM;
 
@@ -106,11 +106,12 @@ retry:
                if (size > value_size) {
                        void *new;
 
-                       new = krealloc(value, size, GFP_KERNEL);
+                       new = kvmalloc(size, GFP_KERNEL);
                        if (!new) {
                                error = -ENOMEM;
                                break;
                        }
+                       kvfree(value);
                        value = new;
                        value_size = size;
                        goto retry;
@@ -125,9 +126,9 @@ retry:
                        error = 0;
                }
        }
-       kfree(value);
+       kvfree(value);
 out:
-       kfree(buf);
+       kvfree(buf);
        return error;
 }