# SPDX-License-Identifier: GPL-2.0 # Regression test for the SquashFS directory-table integer overflow. import os import struct import pytest # metadata block size (SQFS_METADATA_BLOCK_SIZE) and metadata header size SQFS_METADATA_BLOCK_SIZE = 8192 # metablks_count that makes metablks_count * SQFS_METADATA_BLOCK_SIZE wrap a # 32-bit int back down to a tiny value: (2^19 + 1) * 8192 == 2^32 + 8192. NR_METABLKS = (1 << 19) + 1 def make_overflow_image(path): """Build a SquashFS image whose directory table inflates metablks_count so that metablks_count * SQFS_METADATA_BLOCK_SIZE wraps a 32-bit int, then writes one block of data one metadata block past the resulting buffer.""" def metahdr(size): # uncompressed metadata block header (bit 15 set) return struct.pack('