From: sashiko-bot@kernel.org
To: "Christian Brauner" <brauner@kernel.org>
Cc: "Mark Fasheh" <mark@fasheh.com>,
dsterba@suse.cz, "Joseph Qi" <joseph.qi@linux.alibaba.com>,
"Joel Becker" <jlbec@evilplan.org>,
tytso@mit.edu, linux-ext4@vger.kernel.org
Subject: Re: [PATCH RFC 07/28] exfat: keep the current mount options on remount
Date: Mon, 12 Oct 2026 10:36:24 +0000 [thread overview]
Message-ID: <sashiko-outbox-167970@kernel.org> (raw)
In-Reply-To: <20261012-work-fs-sb_rdonly-v1-7-60743a3dc326@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] exfat: data race and torn struct read during remount options copy
--
commit 2d6a9e734992913f68b1b7acddc9bc5d1eb92428
Author: Christian Brauner <brauner@kernel.org>
exfat: keep the current mount options on remount
This commit modifies exfat_init_fs_context() to initialize the filesystem
context with the current superblock mount options during a reconfiguration.
It resolves an issue where remounting without options, such as an emergency
remount, would inadvertently reset mount options like errors=continue to
defaults.
> diff --git a/fs/exfat/super.c b/fs/exfat/super.c
> index a9ea36ba26938..71a348d10c26a 100644
> --- a/fs/exfat/super.c
> +++ b/fs/exfat/super.c
[ ... ]
> @@ -805,6 +807,11 @@ static int exfat_reconfigure(struct fs_context *fc)
> }
>
> swap(*cur_opts, *new_opts);
[Severity: Medium]
Could this swap operation race with a concurrent read?
In exfat_init_fs_context(), the mount options struct is read locklessly
before the s_umount lock is acquired. Concurrently modifying the same
struct here via swap(*cur_opts, *new_opts) allows the compiler to use
non-atomic memory operations, which might lead to a torn read.
> + /*
> + * The iocharset can't change, keep the current string. The new
> + * options have none if the remount didn't specify one.
> + */
> + swap(cur_opts->iocharset, new_opts->iocharset);
[ ... ]
> @@ -831,23 +838,27 @@ static int exfat_init_fs_context(struct fs_context *fc)
>
> 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;
> + /*
> + * Start from the current options so a remount only changes
> + * what it specifies. exfat_reconfigure() refuses to change
> + * most of them, so a remount that doesn't repeat them all
> + * would fail, e.g. emergency remount which passes none. The
> + * iocharset string stays with the superblock and is only
> + * compared if the remount names one, see exfat_reconfigure().
> + */
> + sbi->options = EXFAT_SB(sb)->options;
[Severity: Medium]
Can this struct assignment race with a concurrent remount?
When a user process calls mount -o remount or fsconfig, exfat_init_fs_context()
is invoked and locklessly reads EXFAT_SB(sb)->options. Concurrently, another
thread executing a remount might be modifying this same struct via
swap(*cur_opts, *new_opts) in exfat_reconfigure().
Since exfat_init_fs_context() executes before s_umount is acquired, this
concurrent access allows the compiler to use non-atomic memory operations.
Could this result in a torn read of the 32-bit word containing the bitfields
such as utf8, sys_tz, discard, or keep_last_dots, yielding an unintended
mixture of old and new options during the remount?
> + sbi->options.iocharset = NULL;
> } else {
> sbi->options.fs_uid = current_uid();
> sbi->options.fs_gid = current_gid();
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261012-work-fs-sb_rdonly-v1-0-60743a3dc326@kernel.org?part=7
next prev parent reply other threads:[~2026-10-12 10:36 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 10:20 [PATCH RFC 00/28] fs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:20 ` [PATCH RFC 01/28] ecryptfs: don't leak the inode when a lookup can't open the lower file Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:34 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 02/28] ecryptfs: fall back to a read-only " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:32 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 03/28] ext2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:44 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 04/28] jfs: " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:41 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 05/28] nilfs2: " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:34 ` sashiko-bot
2026-10-13 16:01 ` Ryusuke Konishi
2026-10-13 16:01 ` Ryusuke Konishi
2026-10-12 10:20 ` [PATCH RFC 06/28] fat: " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:37 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 07/28] exfat: keep the current mount options on remount Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:36 ` sashiko-bot [this message]
2026-10-12 10:20 ` [PATCH RFC 08/28] exfat: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:35 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 09/28] hfs: don't set SB_RDONLY after MDB write errors Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:41 ` sashiko-bot
2026-10-12 22:57 ` [Jfs-discussion] " Viacheslav Dubeyko
2026-10-12 22:57 ` Viacheslav Dubeyko
2026-10-12 10:20 ` [PATCH RFC 10/28] hfsplus: don't set SB_RDONLY when creating the attributes tree Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:36 ` sashiko-bot
2026-10-12 22:34 ` [Jfs-discussion] " Viacheslav Dubeyko
2026-10-12 22:34 ` Viacheslav Dubeyko
2026-10-12 10:20 ` [PATCH RFC 11/28] affs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:41 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 12/28] ufs: " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:39 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 13/28] hpfs: " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:35 ` sashiko-bot
2026-10-12 10:20 ` [PATCH RFC 14/28] ntfs: " Christian Brauner
2026-10-12 10:20 ` Christian Brauner
2026-10-12 10:45 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 15/28] ocfs2: keep options that can't change on remount Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:45 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 16/28] ocfs2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:59 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 17/28] zonefs: don't set SB_RDONLY after I/O errors Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:42 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 18/28] btrfs: check BTRFS_FS_STATE_RO instead of SB_RDONLY at runtime Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:53 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 19/28] btrfs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 11:05 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 20/28] gfs2: wait for a pending withdraw before remounting read-only Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:44 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 21/28] gfs2: don't set SB_RDONLY on withdraw Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:48 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 22/28] efivarfs: stop using SB_RDONLY for read-only efivar ops Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:52 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 23/28] ubifs: don't set SB_RDONLY after errors Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 11:05 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 24/28] selftests/filesystems: test filesystem errors while frozen Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:47 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 25/28] ext4: allow remounting read-only in the emergency state Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:49 ` sashiko-bot
2026-10-12 16:38 ` Jan Kara
2026-10-12 16:38 ` Jan Kara
2026-10-12 10:21 ` [PATCH RFC 26/28] selftests/filesystems: test ext4 remounts " Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:52 ` sashiko-bot
2026-10-12 10:21 ` [PATCH RFC 27/28] xfs: allow remounting read-only after a shutdown Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:55 ` sashiko-bot
2026-10-13 7:38 ` Christoph Hellwig
2026-10-13 7:38 ` Christoph Hellwig
2026-10-12 10:21 ` [PATCH RFC 28/28] selftests/filesystems: test xfs remounts " Christian Brauner
2026-10-12 10:21 ` Christian Brauner
2026-10-12 10:51 ` sashiko-bot
2026-10-13 7:40 ` Christoph Hellwig
2026-10-13 7:40 ` Christoph Hellwig
2026-10-12 16:53 ` [PATCH RFC 00/28] fs: don't set SB_RDONLY after filesystem errors Jan Kara
2026-10-12 16:53 ` Jan Kara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=sashiko-outbox-167970@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=brauner@kernel.org \
--cc=dsterba@suse.cz \
--cc=jlbec@evilplan.org \
--cc=joseph.qi@linux.alibaba.com \
--cc=linux-ext4@vger.kernel.org \
--cc=mark@fasheh.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.