On 2025/08/05 7:00, Viacheslav Dubeyko wrote: >> Please show us your patch that solves your issue. > > OK. It will be faster to write my own patch. It works for me. I haven't heard from you about your own patch. I guess that your patch will include diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c index bf4cb7e78396..8d033ffeb8af 100644 --- a/fs/hfs/inode.c +++ b/fs/hfs/inode.c @@ -361,6 +361,10 @@ static int hfs_read_inode(struct inode *inode, void *data) break; case HFS_CDR_DIR: inode->i_ino = be32_to_cpu(rec->dir.DirID); + if (inode->i_ino < HFS_FIRSTUSER_CNID && inode->i_ino != HFS_ROOT_CNID) { + make_bad_inode(inode); + break; + } inode->i_size = be16_to_cpu(rec->dir.Val) + 2; HFS_I(inode)->fs_blocks = 0; inode->i_mode = S_IFDIR | (S_IRWXUGO & ~hsb->s_dir_umask); change, which results in the following. ---------- The root inode's i_ino is 0 or 1 = fail with EINVAL The root inode's i_ino is 2 = success The root inode's i_ino is 3 or 4 = fail with ENOTDIR The root inode's i_ino is 5 to 15 = fail with EINVAL The root inode's i_ino is 16 and beyond = success ---------- But my patch has extra validation on the root inode's i_ino, which results in the following. ---------- The root inode's i_ino is 2 = success The root inode's i_ino is all (i.e. including 16 and beyond) but 2 = fail with EIO ---------- Therefore, while you can propose your patch, I consider that there is no reason to defer my patch.