• Luis Henriques's avatar
    ceph: fix memory leak in __ceph_setxattr() · eeca958d
    Luis Henriques authored
    The ceph_inode_xattr needs to be released when removing an xattr.  Easily
    reproducible running the 'generic/020' test from xfstests or simply by
    doing:
    
      attr -s attr0 -V 0 /mnt/test && attr -r attr0 /mnt/test
    
    While there, also fix the error path.
    
    Here's the kmemleak splat:
    
    unreferenced object 0xffff88001f86fbc0 (size 64):
      comm "attr", pid 244, jiffies 4294904246 (age 98.464s)
      hex dump (first 32 bytes):
        40 fa 86 1f 00 88 ff ff 80 32 38 1f 00 88 ff ff  @........28.....
        00 01 00 00 00 00 ad de 00 02 00 00 00 00 ad de  ................
      backtrace:
        [<ffffffff81560199>] kmemleak_alloc+0x49/0xa0
        [<ffffffff810f3e5b>] kmem_cache_alloc+0x9b/0xf0
        [<ffffffff812b157e>] __ceph_setxattr+0x17e/0x820
        [<ffffffff812b1c57>] ceph_set_xattr_handler+0x37/0x40
        [<ffffffff8111fb4b>] __vfs_removexattr+0x4b/0x60
        [<ffffffff8111fd37>] vfs_removexattr+0x77/0xd0
        [<ffffffff8111fdd1>] removexattr+0x41/0x60
        [<ffffffff8111fe65>] path_removexattr+0x75/0xa0
        [<ffffffff81120aeb>] SyS_lremovexattr+0xb/0x10
        [<ffffffff81564b20>] entry_SYSCALL_64_fastpath+0x13/0x94
        [<ffffffffffffffff>] 0xffffffffffffffff
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarLuis Henriques <lhenriques@suse.com>
    Reviewed-by: default avatar"Yan, Zheng" <zyan@redhat.com>
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    eeca958d
Name
Last commit
Last update
..
Kconfig Loading commit data...
Makefile Loading commit data...
acl.c Loading commit data...
addr.c Loading commit data...
cache.c Loading commit data...
cache.h Loading commit data...
caps.c Loading commit data...
ceph_frag.c Loading commit data...
debugfs.c Loading commit data...
dir.c Loading commit data...
export.c Loading commit data...
file.c Loading commit data...
inode.c Loading commit data...
ioctl.c Loading commit data...
ioctl.h Loading commit data...
locks.c Loading commit data...
mds_client.c Loading commit data...
mds_client.h Loading commit data...
mdsmap.c Loading commit data...
snap.c Loading commit data...
strings.c Loading commit data...
super.c Loading commit data...
super.h Loading commit data...
xattr.c Loading commit data...