CVE-2026-89778

isofs: fix out-of-bounds page array access on empty zisofs block

State
Published
Severity
9.8 Critical
Published
Sep 16, 2026
Updated
Oct 19, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

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

isofs: fix out-of-bounds page array access on empty zisofs block

zisofs_uncompress_block()'s empty-block fast path returns pcount << PAGE_SHIFT, ignoring the incoming poffset, unlike the decompression path which returns bytes produced relative to poffset. zisofs_fill_pages() uses that return to advance its page cursor, so when the zisofs block size is below PAGE_SIZE and a sub-page block leaves poffset partway into a page, a following empty block over-counts and advances pages[] one element past its end, after which "if (poffset && *pages)" reads pages[1] out of bounds. rock.c only rejects a block-size shift > 17, so a crafted "ZF" Rock Ridge record can set it below PAGE_SHIFT; the bug is reached by an ordinary read() of a compressed file on such a mounted ISO9660 image.

Return the byte count relative to poffset and zero only [poffset, PAGE_SIZE) of the first page, matching the decompression path. The page-aligned case (poffset == 0) is unaffected.

BUG: KASAN: slab-out-of-bounds in zisofs_read_folio (fs/isofs/compress.c:290) Read of size 8 at addr ffff88800f5eac48 by task exploit/142 zisofs_read_folio (fs/isofs/compress.c:290) read_pages (mm/readahead.c:184) ... filemap_read (mm/filemap.c:2814) vfs_read (fs/read_write.c:574) __x64_sys_pread64 (fs/read_write.c:769) do_syscall_64 (arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121) The buggy address is located 0 bytes to the right of the allocated 8-byte region in the kmalloc-8 cache

Scores

CVSSScoreVectorSource
3.19.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 59bc055211b8d266ab6089158058bf8268e02006 to before 8b994ac5778a725982fd6a8a3afcaa068d4a93e3Affected
  • 59bc055211b8d266ab6089158058bf8268e02006 to before ad3249cdf9d4ba34bb8b1ff3956a4020fdfb5b0aAffected
  • 59bc055211b8d266ab6089158058bf8268e02006 to before 85904076cece72ee3194646ad7ac8e6659d999aaAffected
  • 59bc055211b8d266ab6089158058bf8268e02006 to before f03425dcbe04aec3c27b9917e97d7d23a2908ddaAffected
  • 59bc055211b8d266ab6089158058bf8268e02006 to before cd616aa0449a772a6956abf03358f0ff31720580Affected
  • 59bc055211b8d266ab6089158058bf8268e02006 to before 9c6eace8d07e90f038c89eb3b756d65a7e259d48Affected
  • 59bc055211b8d266ab6089158058bf8268e02006 to before 68d4d3e78150c7ed7d1195af63ad1e6ace30c661Affected
LinuxLinux
  • 2.6.33Affected
  • before 2.6.33Not affected
  • 5.15.221 through 5.15.*Not affected
  • 6.1.188 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.110 through 6.12.*Not affected
  • 6.18.52 through 6.18.*Not affected
  • 7.2.6 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.