[PATCH v2] erofs: use the opener's credential when verifying metadata accesses

From: Gao Xiang

Date: Thu May 07 2026 - 00:29:10 EST


Similar to commit 905eeb2b7c33 ("erofs: impersonate the opener's
credentials when accessing backing file"), rw_verify_area() needs
the same too.

Fixes: 307210c262a2 ("erofs: verify metadata accesses for file-backed mounts")
Cc: Carlos Llamas <cmllamas@xxxxxxxxxx>
Cc: Sandeep Dhavale <dhavale@xxxxxxxxxx>
Cc: Tatsuyuki Ishi <ishitatsuyuki@xxxxxxxxxx>
Signed-off-by: Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx>
---
v2:
- apply sashiko's suggestion
https://sashiko.dev/#/patchset/20260505155615.2719500-1-hsiangkao%40linux.alibaba.com

fs/erofs/data.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index 44da21c9d777..d6f6035fd714 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -29,6 +29,7 @@ void erofs_put_metabuf(struct erofs_buf *buf)
void *erofs_bread(struct erofs_buf *buf, erofs_off_t offset, bool need_kmap)
{
pgoff_t index = (buf->off + offset) >> PAGE_SHIFT;
+ const struct cred *old_cred = NULL;
struct folio *folio = NULL;
loff_t fpos;
int err;
@@ -40,9 +41,12 @@ void *erofs_bread(struct erofs_buf *buf, erofs_off_t offset, bool need_kmap)
*/
if (buf->file) {
fpos = (loff_t)index << PAGE_SHIFT;
+ old_cred = override_creds(buf->file->f_cred);
err = rw_verify_area(READ, buf->file, &fpos, PAGE_SIZE);
- if (err < 0)
+ if (err < 0) {
+ revert_creds(old_cred);
return ERR_PTR(err);
+ }
}

if (buf->page) {
@@ -53,6 +57,8 @@ void *erofs_bread(struct erofs_buf *buf, erofs_off_t offset, bool need_kmap)
if (!folio || !folio_contains(folio, index)) {
erofs_put_metabuf(buf);
folio = read_mapping_folio(buf->mapping, index, buf->file);
+ if (old_cred)
+ revert_creds(old_cred);
if (IS_ERR(folio))
return folio;
}
--
2.43.5