CVE-2025-38415

Squashfs: check return result of sb_min_blocksize

published July 25, 2025

CVSS
—
EPSS
0%
Percentile
9.8
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

Squashfs: check return result of sb_min_blocksize

Syzkaller reports an "UBSAN: shift-out-of-bounds in squashfs_bio_read" bug.

Syzkaller forks multiple processes which after mounting the Squashfs

filesystem, issues an ioctl("/dev/loop0", LOOP_SET_BLOCK_SIZE, 0x8000).

Now if this ioctl occurs at the same time another process is in the

process of mounting a Squashfs filesystem on /dev/loop0, the failure

occurs. When this happens the following code in squashfs_fill_super()

fails.

----

msblk->devblksize = sb_min_blocksize(sb, SQUASHFS_DEVBLK_SIZE);

msblk->devblksize_log2 = ffz(~msblk->devblksize);

----

sb_min_blocksize() returns 0, which means msblk->devblksize is set to 0.

As a result, ffz(~msblk->devblksize) returns 64, and msblk->devblksize_log2

is set to 64.

This subsequently causes the

UBSAN: shift-out-of-bounds in fs/squashfs/block.c:195:36

shift exponent 64 is too large for 64-bit type 'u64' (aka

'unsigned long long')

This commit adds a check for a 0 return by sb_min_blocksize().

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00203 · 9.8th percentile
Published
2025-07-25T13:32Z
EPSS history
Timeline
  • 25 JUL 13:32Z
    Squashfs: check return result of sb_min_blocksize
    cvelistv5