mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
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>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user