History

ceph: fix NULL pointer dereference in ceph_mds_auth_match()

The CephFS kernel client has regression starting from 6.18-rc1. We have issue in ceph_mds_auth_match() if fs_name == NULL: const char fs_name = mdsc->fsc->mount_options->mds_namespace; ... if (auth->match.fs_name && strcmp(auth->match.fs_name, fs_name)) { / fsname mismatch, try next one */ return 0; } Patrick Donnelly suggested that: In summary, we should definitely start decoding `fs_name` from the MDSMap and do strict authorizations checks against it. Note that the `-o mds_namespace=foo` should only be used for selecting the file system to mount and nothing else. It's possible no mds_namespace is specified but the kernel will mount the only file system that exists which may have name "foo". This patch reworks ceph_mdsmap_decode() and namespace_equals() with the goal of supporting the suggested concept. Now struct ceph_mdsmap contains m_fs_name field that receives copy of extracted FS name by ceph_extract_encoded_string(). For the case of "old" CephFS file systems, it is used "cephfs" name. [ idryomov: replace redundant %*pE with %s in ceph_mdsmap_decode(), get rid of a series of strlen() calls in ceph_namespace_match(), drop changes to namespace_equals() body to avoid treating empty mds_namespace as equal, drop changes to ceph_mdsc_handle_fsmap() as namespace_equals() isn't an equivalent substitution there ]

Viacheslav Dubeyko committed 9 months ago

Commit 7987cce1 parent bc8deda5 files · +43 −11Browse files

Showing the changes to include/linux (1 of 5 files). Show all

Unified · Split

include/linux/ceph/ceph_fs.h+6−0
@@ -31,6 +31,12 @@ · 30 unmodified lines
3131 #define CEPH_INO_CEPH 2 /* hidden .ceph dir */
3232 #define CEPH_INO_GLOBAL_SNAPREALM 3 /* global dummy snaprealm */
3333
34+/*
35+ * name for "old" CephFS file systems,
36+ * see ceph.git e2b151d009640114b2565c901d6f41f6cd5ec652
37+ */
38+#define CEPH_OLD_FS_NAME "cephfs"
39+
3440 /* arbitrary limit on max # of monitors (cluster of 3 is typical) */
3541 #define CEPH_MAX_MON 31
3642