On Sat, 4 Jul 2020, Chengguang Xu wrote: > After commit fdc85222d58e ("kernfs: kvmalloc xattr value > instead of kmalloc"), simple xattr entry is allocated with > kvmalloc() instead of kmalloc(), so we should release it > with kvfree() instead of kfree(). > > Cc: stable@xxxxxxxxxxxxxxx # v5.7 > Cc: Daniel Xu <dxu@xxxxxxxxx> > Cc: Chris Down <chris@xxxxxxxxxxxxxx> > Cc: Andreas Dilger <adilger@xxxxxxxxx> > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: Tejun Heo <tj@xxxxxxxxxx> > Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > Cc: Hugh Dickins <hughd@xxxxxxxxxx> > Fixes: fdc85222d58e ("kernfs: kvmalloc xattr value instead of kmalloc") > Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxxxx> Good catch, thank you: Acked-by: Hugh Dickins <hughd@xxxxxxxxxx> > --- > v1->v2: > - Fix freeing issue in simple_xattrs_free(). > - Change patch subject. > > include/linux/xattr.h | 3 ++- > mm/shmem.c | 2 +- > 2 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/include/linux/xattr.h b/include/linux/xattr.h > index 47eaa34f8761..c5afaf8ca7a2 100644 > --- a/include/linux/xattr.h > +++ b/include/linux/xattr.h > @@ -15,6 +15,7 @@ > #include <linux/slab.h> > #include <linux/types.h> > #include <linux/spinlock.h> > +#include <linux/mm.h> > #include <uapi/linux/xattr.h> > > struct inode; > @@ -94,7 +95,7 @@ static inline void simple_xattrs_free(struct simple_xattrs *xattrs) > > list_for_each_entry_safe(xattr, node, &xattrs->head, list) { > kfree(xattr->name); > - kfree(xattr); > + kvfree(xattr); > } > } > > diff --git a/mm/shmem.c b/mm/shmem.c > index a0dbe62f8042..b2abca3f7f33 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -3178,7 +3178,7 @@ static int shmem_initxattrs(struct inode *inode, > new_xattr->name = kmalloc(XATTR_SECURITY_PREFIX_LEN + len, > GFP_KERNEL); > if (!new_xattr->name) { > - kfree(new_xattr); > + kvfree(new_xattr); > return -ENOMEM; > } > > -- > 2.20.1 > > > >