]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
debugfs: fix mount options not being applied
authorCharalampos Mitrodimas <charmitro@posteo.net>
Sat, 16 Aug 2025 14:14:37 +0000 (14:14 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:31:08 +0000 (16:31 +0200)
commit ba6cc29351b1fa0cb9adce91b88b9f3c3cbe9c46 upstream.

Mount options (uid, gid, mode) are silently ignored when debugfs is
mounted. This is a regression introduced during the conversion to the
new mount API.

When the mount API conversion was done, the parsed options were never
applied to the superblock when it was reused. As a result, the mount
options were ignored when debugfs was mounted.

Fix this by following the same pattern as the tracefs fix in commit
e4d32142d1de ("tracing: Fix tracefs mount options"). Call
debugfs_reconfigure() in debugfs_get_tree() to apply the mount options
to the superblock after it has been created or reused.

As an example, with the bug the "mode" mount option is ignored:

  $ mount -o mode=0666 -t debugfs debugfs /tmp/debugfs_test
  $ mount | grep debugfs_test
  debugfs on /tmp/debugfs_test type debugfs (rw,relatime)
  $ ls -ld /tmp/debugfs_test
  drwx------ 25 root root 0 Aug  4 14:16 /tmp/debugfs_test

With the fix applied, it works as expected:

  $ mount -o mode=0666 -t debugfs debugfs /tmp/debugfs_test
  $ mount | grep debugfs_test
  debugfs on /tmp/debugfs_test type debugfs (rw,relatime,mode=666)
  $ ls -ld /tmp/debugfs_test
  drw-rw-rw- 37 root root 0 Aug  2 17:28 /tmp/debugfs_test

Fixes: a20971c18752 ("vfs: Convert debugfs to use the new mount API")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220406
Cc: stable <stable@kernel.org>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Charalampos Mitrodimas <charmitro@posteo.net>
Link: https://lore.kernel.org/r/20250816-debugfs-mount-opts-v3-1-d271dad57b5b@posteo.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/debugfs/inode.c

index 66d9b3b4c5881defe68fa2527f621e0162f2c48c..525f3aa780cd39e77754be768848507a11de6c42 100644 (file)
@@ -183,6 +183,9 @@ static int debugfs_reconfigure(struct fs_context *fc)
        struct debugfs_fs_info *sb_opts = sb->s_fs_info;
        struct debugfs_fs_info *new_opts = fc->s_fs_info;
 
+       if (!new_opts)
+               return 0;
+
        sync_filesystem(sb);
 
        /* structure copy of new mount options to sb */
@@ -269,10 +272,16 @@ static int debugfs_fill_super(struct super_block *sb, struct fs_context *fc)
 
 static int debugfs_get_tree(struct fs_context *fc)
 {
+       int err;
+
        if (!(debugfs_allow & DEBUGFS_ALLOW_API))
                return -EPERM;
 
-       return get_tree_single(fc, debugfs_fill_super);
+       err = get_tree_single(fc, debugfs_fill_super);
+       if (err)
+               return err;
+
+       return debugfs_reconfigure(fc);
 }
 
 static void debugfs_free_fc(struct fs_context *fc)