delta[1] should not exceed (1 << lclusterbits) - 1, usually 4095
blocks, which means a single compressed extent which isn't less
than 16MiB could trigger this issue (it very rare happens).

Fixes: 76b822726ff8 ("erofs-utils: introduce compacted compression indexes")
Signed-off-by: Gao Xiang <[email protected]>
---
 lib/compress.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/compress.c b/lib/compress.c
index 65c6f90..f38c795 100644
--- a/lib/compress.c
+++ b/lib/compress.c
@@ -627,7 +627,8 @@ static void *write_compacted_indexes(u8 *out,
                                blkaddr += cblks;
                                *dummy_head = false;
                        } else if (i + 1 == vcnt) {
-                               offset = cv[i].u.delta[1];
+                               offset = min_t(u16, cv[i].u.delta[1],
+                                               (1 << logical_clusterbits) - 1);
                        } else {
                                offset = cv[i].u.delta[0];
                        }
-- 
2.24.4

Reply via email to