diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c
index cbd3f72c83e9ac7cd22279cdc3360cbcebf7c82a..7ca108c3834c86748a6d3f3db8edbb46640ef3f1 100644
--- a/fs/erofs/zmap.c
+++ b/fs/erofs/zmap.c
@@ -85,6 +85,10 @@ static int legacy_load_cluster_from_disk(struct z_erofs_maprecorder *m,
 		if (advise & Z_EROFS_LI_PARTIAL_REF)
 			m->partialref = true;
 		m->clusterofs = le16_to_cpu(di->di_clusterofs);
+		if (m->clusterofs >= 1 << vi->z_logical_clusterbits) {
+			DBG_BUGON(1);
+			return -EFSCORRUPTED;
+		}
 		m->pblk = le32_to_cpu(di->di_u.blkaddr);
 		break;
 	default: