All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] fs/squashfs: fix two out-of-bounds reads on crafted images
@ 2026-06-12  7:54 Piyush Paliwal
  2026-06-12  7:54 ` [PATCH 1/2] fs/squashfs: bound the inode table walk in sqfs_find_inode() Piyush Paliwal
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Piyush Paliwal @ 2026-06-12  7:54 UTC (permalink / raw)
  To: u-boot
  Cc: joaomarcos.costa, richard.genoud, miquel.raynal, thomas.petazzoni,
	trini, eric.kilmer, Piyush Paliwal

Two independent out-of-bounds reads in the SquashFS driver, both reachable
by pointing U-Boot at an attacker-supplied image (e.g. ls/load on a crafted
USB/SD/netboot rootfs). Either one crashes the bootloader (DoS); patch 2 can
also copy adjacent heap memory into the loaded file (information disclosure).

  1/2 sqfs_find_inode()/sqfs_inode_size() walk the decompressed inode table
      using on-disk sizes with no check that the cursor stays inside the
      buffer -> wild read / SEGV, e.g. from a simple "ls".
  2/2 sqfs_read_nest() uses the on-disk fragment offset as an unbounded
      source index into the fragment block -> out-of-bounds heap read when
      loading a fragment-backed file.

Both were found by fuzzing the sandbox build (CONFIG_ASAN) of sqfsls/sqfsload
with mutated images. With the fixes, the crashing inputs are rejected
cleanly, 2000 fuzz iterations produce no further crashes, and the valid-image
path is unchanged.

These are distinct from the 2024 SquashFS CVE cluster (CVE-2024-57254..57259,
fixed in 2025.01-rc1) and from the sqfs_frag_lookup() fix (e365a269df5): the
earlier work added NULL checks at the callers and fixed the symlink-size and
fragment-table paths, but left these inode-table-walk and fragment-data
paths unbounded.

The two patches are independent and can be applied in either order.

Piyush Paliwal (2):
  fs/squashfs: bound the inode table walk in sqfs_find_inode()
  fs/squashfs: bound fragment offset/size in sqfs_read_nest()

 fs/squashfs/sqfs.c            |  50 ++++++++++++----
 fs/squashfs/sqfs_filesystem.h |   6 +-
 fs/squashfs/sqfs_inode.c      | 106 +++++++++++++++++++++++++++++-----
 3 files changed, 134 insertions(+), 28 deletions(-)

-- 
2.41.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-06-25  8:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-12  7:54 [PATCH 0/2] fs/squashfs: fix two out-of-bounds reads on crafted images Piyush Paliwal
2026-06-12  7:54 ` [PATCH 1/2] fs/squashfs: bound the inode table walk in sqfs_find_inode() Piyush Paliwal
2026-06-12  7:54 ` [PATCH 2/2] fs/squashfs: bound fragment offset/size in sqfs_read_nest() Piyush Paliwal
2026-06-25  8:08 ` [PATCH 0/2] fs/squashfs: fix two out-of-bounds reads on crafted images Richard GENOUD

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.