]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dcache: use kmalloc_flex() in __d_alloc
authorThorsten Blum <thorsten.blum@linux.dev>
Fri, 17 Apr 2026 09:42:40 +0000 (11:42 +0200)
committerChristian Brauner <brauner@kernel.org>
Thu, 21 May 2026 07:32:47 +0000 (09:32 +0200)
Use kmalloc_flex() when allocating a new 'struct external_name' in
__d_alloc() to replace offsetof() and the open-coded size arithmetic,
and to keep the size type-safe.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Link: https://patch.msgid.link/20260417094238.551114-3-thorsten.blum@linux.dev
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jori Koolstra <jkoolstra@xs4all.nl>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/dcache.c

index 2c61aeea41f45df05bf335a28e4e54a16583f056..8ffc4ef79bbab132fdf9ec91385dd22156b858c2 100644 (file)
@@ -1820,10 +1820,10 @@ static struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
                name = &slash_name;
                dname = dentry->d_shortname.string;
        } else if (name->len > DNAME_INLINE_LEN-1) {
-               size_t size = offsetof(struct external_name, name[1]);
-               struct external_name *p = kmalloc(size + name->len,
-                                                 GFP_KERNEL_ACCOUNT |
-                                                 __GFP_RECLAIMABLE);
+               struct external_name *p;
+
+               p = kmalloc_flex(*p, name, name->len + 1,
+                                GFP_KERNEL_ACCOUNT | __GFP_RECLAIMABLE);
                if (!p) {
                        kmem_cache_free(dentry_cache, dentry); 
                        return NULL;