Re: [PATCH v2] erofs: don't reuse a superblock for a mount that passes device=
From: Gao Xiang
Date: Mon Oct 26 2026 - 06:41:14 EST
On Mon, Oct 26, 2026 at 05:22:17PM +0800, Zhan Xusheng wrote:
> From: Zhan Xusheng <zhanxusheng@xxxxxxxxxx>
>
> superblock_share together with device= is rejected in
> erofs_fc_fill_super():
>
> if (test_opt(&sbi->opt, SUPERBLOCK_SHARE) &&
> sbi->devs->extra_devices)
> return -EINVAL;
>
> but extra_devices is kept in sbi->devs, not in sbi->opt, and
> erofs_sb_share_test_super() compares only the backing inode, the
> fsoffset and sbi->opt. So once the image is mounted with
> superblock_share, a second mount with superblock_share,device= matches
> that superblock and get_tree_super() reuses it without calling
> fill_super() at all.
>
> The same command line therefore either fails with -EINVAL or succeeds
> with device= quietly dropped, depending on whether a compatible mount
> already exists.
>
> Refuse to match a context that brought device= options, so that it gets
> a superblock of its own and fill_super() decides as it does today.
>
> Only the incoming context can be tested: a shared superblock may have
> extra_devices set itself, because erofs_scan_devices() fills the device
> table from the image when no device= was given.
>
> Fixes: cd4108319bb3 ("erofs: reuse superblock for file-backed mounts")
> Signed-off-by: Zhan Xusheng <zhanxusheng@xxxxxxxxxx>
Reviewed-by: Gao Xiang <xiang@xxxxxxxxxx>
Also I will update the subject as "erofs: fix disallowing superblock_share
if device= is set".
Thanks,
Gao Xiang