]> git.baikalelectronics.ru Git - kernel.git/commit
ceph: prevent a client from exceeding the MDS maximum xattr size
authorLuís Henriques <lhenriques@suse.de>
Fri, 3 Jun 2022 13:29:09 +0000 (14:29 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 2 Aug 2022 22:54:12 +0000 (00:54 +0200)
commit5c5bc490a140ca53de9eeb77d2d72f4c844ad5e3
tree439f6d9295ccfee1165b0c5c9d9d8de01b65a724
parent8fa227feddf8aa295a2a88b2be899382b3bbcad3
ceph: prevent a client from exceeding the MDS maximum xattr size

The MDS tries to enforce a limit on the total key/values in extended
attributes.  However, this limit is enforced only if doing a synchronous
operation (MDS_OP_SETXATTR) -- if we're buffering the xattrs, the MDS
doesn't have a chance to enforce these limits.

This patch adds support for decoding the xattrs maximum size setting that is
distributed in the mdsmap.  Then, when setting an xattr, the kernel client
will revert to do a synchronous operation if that maximum size is exceeded.

While there, fix a dout() that would trigger a printk warning:

[   98.718078] ------------[ cut here ]------------
[   98.719012] precision 65536 too large
[   98.719039] WARNING: CPU: 1 PID: 3755 at lib/vsprintf.c:2703 vsnprintf+0x5e3/0x600
...

Link: https://tracker.ceph.com/issues/55725
Signed-off-by: Luís Henriques <lhenriques@suse.de>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/mdsmap.c
fs/ceph/xattr.c
include/linux/ceph/mdsmap.h