]> git.hungrycats.org Git - linux/commitdiff
erofs: relax sanity check for tail pclusters due to ztailpacking
authorGao Xiang <hsiangkao@linux.alibaba.com>
Wed, 8 Jul 2026 03:18:45 +0000 (11:18 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Sep 2026 11:36:18 +0000 (13:36 +0200)
[ Upstream commit d3386e17393bec1341cfeedb9d08d6846ccd6fb2 ]

If the tail data can be inlined into the inode meta block, it should
be converted into a regular tail pcluster.

In principle, it should be converted into an uncompressed pcluster if
there is not enough gain to use compression (map->m_llen < map->m_plen);
but since there are various shipped images, relax the condition for
ztailpacking tail pcluster fallback instead of reporting corruption
incorrectly.

Reported-and-tested-by: Yifan Zhao <zhaoyifan28@huawei.com>
Reported-by: Alberto Salvia Novella <es20490446e@gmail.com>
Closes: https://github.com/erofs/erofs-utils/issues/51
Fixes: a5242d37c83a ("erofs: error out obviously illegal extents in advance")
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/erofs/zmap.c

index 97a664f81169e471bbc22fbc9302f2f7afe6aaf5..28d99f9e23bfa1f60c98e6db05331e17e33397e2 100644 (file)
@@ -729,7 +729,8 @@ static int z_erofs_map_sanity_check(struct inode *inode,
                                  map->m_algorithmformat, EROFS_I(inode)->nid);
                        return -EFSCORRUPTED;
                }
-               if (EROFS_MAP_FULL(map->m_flags) && map->m_llen < map->m_plen) {
+               if (EROFS_MAP_FULL(map->m_flags) && map->m_llen < map->m_plen &&
+                   map->m_la + map->m_llen < inode->i_size) {
                        erofs_err(inode->i_sb, "too much compressed data @ la %llu of nid %llu",
                                  map->m_la, EROFS_I(inode)->nid);
                        return -EFSCORRUPTED;