]> git.ipfire.org Git - people/ms/linux.git/commit - fs/ceph/xattr.c
ceph: fix listxattr vxattr buffer length calculation
authorDavid Disseldorp <ddiss@suse.de>
Thu, 18 Apr 2019 12:15:48 +0000 (14:15 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Jul 2019 12:01:41 +0000 (14:01 +0200)
commit2b2abcac8c251d1c77a4cc9d9f248daefae0fb4e
treee5d02df95cdaaf86449ffebd879f0a24cf7c8f1d
parent100cc610a550affcbef13d74855f736b92caa947
ceph: fix listxattr vxattr buffer length calculation

ceph_listxattr() incorrectly returns a length based on the static
ceph_vxattrs_name_size() value, which only takes into account whether
vxattrs are hidden, ignoring vxattr.exists_cb().

When filling the xattr buffer ceph_listxattr() checks VXATTR_FLAG_HIDDEN
and vxattr.exists_cb(). If both are false, we return an incorrect
(oversize) length.

Fix this behaviour by always calculating the vxattrs length at runtime,
taking both vxattr.hidden and vxattr.exists_cb() into account.

This bug is only exposed with the new "ceph.snap.btime" vxattr, as all
other vxattrs with a non-null exists_cb also carry VXATTR_FLAG_HIDDEN.

Signed-off-by: David Disseldorp <ddiss@suse.de>
Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/xattr.c