mirror of https://github.com/torvalds/linux.git
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:
parent
d70a5804c5
commit
51fc7b4ce1
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue