Re: [PATCH v2] squashfs: Add dictionary size range check to prevent shift-out-of-bounds

From: Phillip Lougher

Date: Wed Jul 22 2026 - 02:35:51 EST




On 13/07/2026 12:55, Ran Hongyun wrote:
When an abnormal SquashFS image (COMP_OPTS flag is 1 but dictionary size
is 0) is mounted, and performs shift operations using dictionarysize, the
shift exponent is -1, causing a shift-out-of-bounds.

Detail as below:
squashfs_comp_opts(msblk, buffer, length)
squashfs_xz_comp_opts()
if (comp_opts)
n = ffs(opts->dict_size) - 1;<----opts->dict_size=0, n=-1
if (opts->dict_size != (1 << n) && opts->dict_size !=
(1 << n) + (1 << (n + 1))) <----shift-out-of-bounds

Fix it by adding a dictionary size range check before the shift operation.

Reviewed-by: Phillip Lougher <phillip@xxxxxxxxxxxxxxx>

Andrew Morton handles patch submission to Linus for me. CC'ing him.

Phillip