diff options
| author | Yuezhang Mo <Yuezhang.Mo@sony.com> | 2025-11-28 17:51:10 +0800 |
|---|---|---|
| committer | Namjae Jeon <linkinjeon@kernel.org> | 2025-12-03 10:00:17 +0900 |
| commit | 51fc7b4ce10ccab8ea5e4876bcdc42cf5202a0ef (patch) | |
| tree | 213860d787d5c4c2fcb46929f84a75a831db23e1 | |
| parent | d70a5804c563b5e34825353ba9927509df709651 (diff) | |
exfat: fix remount failure in different process environments
The kernel test robot reported that the exFAT remount operation
failed. The reason for the failure was that the process's umask
is different between mount and remount, causing fs_fmask and
fs_dmask are changed.
Potentially, both gid and uid may also be changed. Therefore, when
initializing fs_context for remount, inherit these mount options
from the options used during mount.
Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202511251637.81670f5c-lkp@intel.com
Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
| -rw-r--r-- | fs/exfat/super.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/fs/exfat/super.c b/fs/exfat/super.c index bc03f47374d4..10e872a99663 100644 --- a/fs/exfat/super.c +++ b/fs/exfat/super.c @@ -824,10 +824,21 @@ static int exfat_init_fs_context(struct fs_context *fc) ratelimit_state_init(&sbi->ratelimit, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST); - sbi->options.fs_uid = current_uid(); - sbi->options.fs_gid = current_gid(); - sbi->options.fs_fmask = current->fs->umask; - sbi->options.fs_dmask = current->fs->umask; + if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE && fc->root) { + struct super_block *sb = fc->root->d_sb; + struct exfat_mount_options *cur_opts = &EXFAT_SB(sb)->options; + + sbi->options.fs_uid = cur_opts->fs_uid; + sbi->options.fs_gid = cur_opts->fs_gid; + sbi->options.fs_fmask = cur_opts->fs_fmask; + sbi->options.fs_dmask = cur_opts->fs_dmask; + } else { + sbi->options.fs_uid = current_uid(); + sbi->options.fs_gid = current_gid(); + sbi->options.fs_fmask = current->fs->umask; + sbi->options.fs_dmask = current->fs->umask; + } + sbi->options.allow_utime = -1; sbi->options.errors = EXFAT_ERRORS_RO; exfat_set_iocharset(&sbi->options, exfat_default_iocharset); |