Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

debugfs: fix mount options not being applied

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@vger.kernel.org
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Charalampos Mitrodimas <charmitro@posteo.net>
Link: https://lore.kernel.org/20250816-debugfs-mount-opts-v3-1-d271dad57b5b@posteo.net
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Charalampos Mitrodimas and committed by
Christian Brauner
8e7e265d f8f59a2c

+10 -1
+10 -1
fs/debugfs/inode.c
··· 183 183 struct debugfs_fs_info *sb_opts = sb->s_fs_info; 184 184 struct debugfs_fs_info *new_opts = fc->s_fs_info; 185 185 186 + if (!new_opts) 187 + return 0; 188 + 186 189 sync_filesystem(sb); 187 190 188 191 /* structure copy of new mount options to sb */ ··· 285 282 286 283 static int debugfs_get_tree(struct fs_context *fc) 287 284 { 285 + int err; 286 + 288 287 if (!(debugfs_allow & DEBUGFS_ALLOW_API)) 289 288 return -EPERM; 290 289 291 - return get_tree_single(fc, debugfs_fill_super); 290 + err = get_tree_single(fc, debugfs_fill_super); 291 + if (err) 292 + return err; 293 + 294 + return debugfs_reconfigure(fc); 292 295 } 293 296 294 297 static void debugfs_free_fc(struct fs_context *fc)