mirror-linux/include/linux/ceph
Viacheslav Dubeyko 7987cce375 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 ]

Cc: stable@vger.kernel.org
Fixes: 22c73d52a6 ("ceph: fix multifs mds auth caps issue")
Link: https://tracker.ceph.com/issues/73886
Signed-off-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
Tested-by: Patrick Donnelly <pdonnell@ibm.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
2026-02-04 22:00:42 +01:00
..
auth.h
buffer.h
ceph_debug.h ceph: Use no_printk() helper 2024-03-19 16:11:42 +01:00
ceph_features.h
ceph_frag.h
ceph_fs.h ceph: fix NULL pointer dereference in ceph_mds_auth_match() 2026-02-04 22:00:42 +01:00
ceph_hash.h
cls_lock_client.h
debugfs.h
decode.h move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
libceph.h libceph: drop started parameter of __ceph_open_session() 2025-11-26 23:29:11 +01:00
messenger.h libceph: pass the message pointer instead of loading con->out_msg 2025-10-08 23:30:46 +02:00
mon_client.h ceph: Annotate struct ceph_monmap with __counted_by 2023-09-18 10:39:29 +01:00
msgpool.h
msgr.h
osd_client.h ceph: Remove osd_client deadcode 2025-04-03 21:35:32 +02:00
osdmap.h
pagelist.h libceph: Remove unused ceph_pagelist functions 2024-11-18 17:34:35 +01:00
rados.h libceph: add CEPH_OSD_OP_ASSERT_VER support 2023-08-24 11:24:35 +02:00
string_table.h
striper.h
types.h