From: sashiko-bot@kernel.org
To: "Christian Brauner" <brauner@kernel.org>, "Jan Kara" <jack@suse.com>
Cc: "Al Viro" <viro@zeniv.linux.org.uk>,
linux-ext4@vger.kernel.org, linux-mm@kvack.org,
linux-efi@vger.kernel.org, linux-mtd@lists.infradead.org,
dsterba@suse.cz, tytso@mit.edu, "Mark Fasheh" <mark@fasheh.com>,
"Joel Becker" <jlbec@evilplan.org>,
"Joseph Qi" <joseph.qi@linux.alibaba.com>
Subject: Re: [PATCH v2 02/34] ecryptfs: fall back to a read-only lower file
Date: Fri, 30 Oct 2026 16:09:48 +0000 [thread overview]
Message-ID: <sashiko-outbox-191221@kernel.org> (raw)
In-Reply-To: <20261029-work-fs-sb_rdonly-v2-2-2f44f64f0b66@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] ecryptfs: ECRYPTFS_KEY_VALID left set after ecryptfs_initialize_file() fails
--
commit f7dbc785a33f0a188b62f1d0ae6c24e5fc32a62c
Author: Christian Brauner <brauner@kernel.org>
ecryptfs: fall back to a read-only lower file
This commit falls back to opening the lower file read-only when opening it
read-write fails with EROFS, and rejects writes to a read-only lower file in
ecryptfs_write_lower() and __ecryptfs_truncate() with EROFS.
> diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
> index b3b451c2b9410..b3956ae50ff66 100644
> --- a/fs/ecryptfs/read_write.c
> +++ b/fs/ecryptfs/read_write.c
> @@ -33,6 +33,9 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data,
> lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
> if (!lower_file)
> return -EIO;
> + /* ecryptfs_open_lower() may have fallen back to a read-only file. */
> + if (!(lower_file->f_mode & FMODE_WRITE))
> + return -EROFS;
[Severity: Medium]
When opening an existing 0-byte lower file with O_RDONLY on a read-only lower
mount (or a lower filesystem in an error state) with default mount options,
ecryptfs_open() sets ECRYPTFS_POLICY_APPLIED | ECRYPTFS_ENCRYPTED on
crypt_stat->flags and calls read_or_initialize_metadata().
Because the lower file is empty, ecryptfs_read_metadata() fails and
read_or_initialize_metadata() calls ecryptfs_initialize_file():
fs/ecryptfs/inode.c:ecryptfs_initialize_file() {
rc = ecryptfs_new_file_context(ecryptfs_inode);
if (rc) {
...
goto out;
}
rc = ecryptfs_get_lower_file(ecryptfs_dentry, ecryptfs_inode);
...
rc = ecryptfs_write_metadata(ecryptfs_dentry, ecryptfs_inode);
if (rc)
printk(KERN_ERR "Error writing headers; rc = [%d]\n", rc);
ecryptfs_put_lower_file(ecryptfs_inode);
out:
return rc;
}
ecryptfs_new_file_context() sets ECRYPTFS_ENCRYPTED | ECRYPTFS_KEY_VALID in
crypt_stat->flags before ecryptfs_write_metadata() calls
ecryptfs_write_lower() and fails with -EROFS. Neither
ecryptfs_initialize_file() nor read_or_initialize_metadata() clears
ECRYPTFS_KEY_VALID (or ECRYPTFS_POLICY_APPLIED) on failure.
On a second open(O_RDONLY) or ecryptfs_setattr() on the same cached inode,
read_or_initialize_metadata() checks the flags at the start of the function:
fs/ecryptfs/file.c:read_or_initialize_metadata() {
if (crypt_stat->flags & ECRYPTFS_POLICY_APPLIED &&
crypt_stat->flags & ECRYPTFS_KEY_VALID) {
rc = 0;
goto out;
}
...
}
Because both flags remain set from the failed initialization, does the second
open short-circuit metadata validation and succeed on the uninitialized empty
file (and if the lower mount is later remounted read-write, allow writes using
an in-memory key whose header was never written to disk)?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261029-work-fs-sb_rdonly-v2-0-2f44f64f0b66@kernel.org?part=2
WARNING: multiple messages have this Message-ID (diff)
From: sashiko-bot@kernel.org
To: "Christian Brauner" <brauner@kernel.org>, "Jan Kara" <jack@suse.com>
Cc: "Al Viro" <viro@zeniv.linux.org.uk>,
linux-ext4@vger.kernel.org, linux-mm@kvack.org,
linux-efi@vger.kernel.org, linux-mtd@lists.infradead.org,
dsterba@suse.cz, tytso@mit.edu, "Mark Fasheh" <mark@fasheh.com>,
"Joel Becker" <jlbec@evilplan.org>,
"Joseph Qi" <joseph.qi@linux.alibaba.com>
Subject: Re: [PATCH v2 02/34] ecryptfs: fall back to a read-only lower file
Date: Fri, 30 Oct 2026 16:09:48 +0000 [thread overview]
Message-ID: <sashiko-outbox-191221@kernel.org> (raw)
In-Reply-To: <20261029-work-fs-sb_rdonly-v2-2-2f44f64f0b66@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] ecryptfs: ECRYPTFS_KEY_VALID left set after ecryptfs_initialize_file() fails
--
commit f7dbc785a33f0a188b62f1d0ae6c24e5fc32a62c
Author: Christian Brauner <brauner@kernel.org>
ecryptfs: fall back to a read-only lower file
This commit falls back to opening the lower file read-only when opening it
read-write fails with EROFS, and rejects writes to a read-only lower file in
ecryptfs_write_lower() and __ecryptfs_truncate() with EROFS.
> diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
> index b3b451c2b9410..b3956ae50ff66 100644
> --- a/fs/ecryptfs/read_write.c
> +++ b/fs/ecryptfs/read_write.c
> @@ -33,6 +33,9 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data,
> lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
> if (!lower_file)
> return -EIO;
> + /* ecryptfs_open_lower() may have fallen back to a read-only file. */
> + if (!(lower_file->f_mode & FMODE_WRITE))
> + return -EROFS;
[Severity: Medium]
When opening an existing 0-byte lower file with O_RDONLY on a read-only lower
mount (or a lower filesystem in an error state) with default mount options,
ecryptfs_open() sets ECRYPTFS_POLICY_APPLIED | ECRYPTFS_ENCRYPTED on
crypt_stat->flags and calls read_or_initialize_metadata().
Because the lower file is empty, ecryptfs_read_metadata() fails and
read_or_initialize_metadata() calls ecryptfs_initialize_file():
fs/ecryptfs/inode.c:ecryptfs_initialize_file() {
rc = ecryptfs_new_file_context(ecryptfs_inode);
if (rc) {
...
goto out;
}
rc = ecryptfs_get_lower_file(ecryptfs_dentry, ecryptfs_inode);
...
rc = ecryptfs_write_metadata(ecryptfs_dentry, ecryptfs_inode);
if (rc)
printk(KERN_ERR "Error writing headers; rc = [%d]\n", rc);
ecryptfs_put_lower_file(ecryptfs_inode);
out:
return rc;
}
ecryptfs_new_file_context() sets ECRYPTFS_ENCRYPTED | ECRYPTFS_KEY_VALID in
crypt_stat->flags before ecryptfs_write_metadata() calls
ecryptfs_write_lower() and fails with -EROFS. Neither
ecryptfs_initialize_file() nor read_or_initialize_metadata() clears
ECRYPTFS_KEY_VALID (or ECRYPTFS_POLICY_APPLIED) on failure.
On a second open(O_RDONLY) or ecryptfs_setattr() on the same cached inode,
read_or_initialize_metadata() checks the flags at the start of the function:
fs/ecryptfs/file.c:read_or_initialize_metadata() {
if (crypt_stat->flags & ECRYPTFS_POLICY_APPLIED &&
crypt_stat->flags & ECRYPTFS_KEY_VALID) {
rc = 0;
goto out;
}
...
}
Because both flags remain set from the failed initialization, does the second
open short-circuit metadata validation and succeed on the uninitialized empty
file (and if the lower mount is later remounted read-write, allow writes using
an in-memory key whose header was never written to disk)?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261029-work-fs-sb_rdonly-v2-0-2f44f64f0b66@kernel.org?part=2
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2026-10-30 16:09 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-29 16:06 [PATCH v2 00/34] fs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-29 16:06 ` [PATCH v2 01/34] ecryptfs: don't leak the inode when a lookup can't open the lower file Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 02/34] ecryptfs: fall back to a read-only " Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot [this message]
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 03/34] fs: add a generic emergency read-only state Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 04/34] ext2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 05/34] jfs: " Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 06/34] nilfs2: " Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 07/34] fat: " Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:06 ` [PATCH v2 08/34] exfat: keep the current mount options on remount Christian Brauner
2026-10-29 16:06 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 09/34] exfat: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 10/34] exfat: use the generic emergency read-only state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 11/34] hfs: don't set SB_RDONLY after MDB write errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 12/34] hfs: use the generic emergency read-only state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 13/34] hfsplus: don't set SB_RDONLY when creating the attributes tree Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:09 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 14/34] affs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 15/34] ufs: " Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 16/34] hpfs: " Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 17/34] ntfs: " Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 18/34] ntfs: use the generic emergency read-only state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 19/34] ocfs2: keep the current mount options on remount Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 2:58 ` Joseph Qi
2026-10-30 2:58 ` Joseph Qi
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 20/34] ocfs2: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 3:01 ` Joseph Qi
2026-10-30 3:01 ` Joseph Qi
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 21/34] zonefs: don't set SB_RDONLY after I/O errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 22/34] zonefs: use the generic emergency read-only state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 23/34] btrfs: check BTRFS_FS_STATE_RO instead of SB_RDONLY at runtime Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 24/34] btrfs: don't set SB_RDONLY after filesystem errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 25/34] gfs2: wait for a pending withdraw before remounting read-only Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 26/34] gfs2: don't set SB_RDONLY on withdraw Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 27/34] efivarfs: stop using SB_RDONLY for read-only efivar ops Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 28/34] ubifs: don't set SB_RDONLY after errors Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 3:42 ` Zhihao Cheng
2026-10-30 3:42 ` Zhihao Cheng
2026-10-30 16:10 ` sashiko-bot
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 29/34] selftests/filesystems: test filesystem errors while frozen Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 30/34] ext4: allow remounting read-only in the emergency state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 31/34] ext4: use the generic emergency read-only state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 32/34] selftests/filesystems: test ext4 remounts in the emergency state Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 33/34] xfs: allow remounting read-only after a shutdown Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
2026-10-29 16:07 ` [PATCH v2 34/34] selftests/filesystems: test xfs remounts " Christian Brauner
2026-10-29 16:07 ` Christian Brauner
2026-10-30 16:10 ` sashiko-bot
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-191221@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=brauner@kernel.org \
--cc=dsterba@suse.cz \
--cc=jack@suse.com \
--cc=jlbec@evilplan.org \
--cc=joseph.qi@linux.alibaba.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-mtd@lists.infradead.org \
--cc=mark@fasheh.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/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.