From: Samuel Moelius <sam.moelius@trailofbits.com>
To: kees@kernel.org
Cc: brauner@kernel.org, iwasbaeyz@gmail.com,
linux-kernel@vger.kernel.org, rmk+kernel@armlinux.org.uk,
sam.moelius@trailofbits.com, viro@zeniv.linux.org.uk
Subject: [PATCH v2 1/2] adfs: reject disc records smaller than one filesystem block
Date: Sun, 28 Jun 2026 22:01:25 +0000 [thread overview]
Message-ID: <20260628220126.94212-2-sam.moelius@trailofbits.com> (raw)
In-Reply-To: <20260628220126.94212-1-sam.moelius@trailofbits.com>
ADFS uses the on-disk disc size to report statfs block counts. The disc
record validator checks the sector size, id length, high disc-size bits,
map zone count, and reserved bytes, but it accepts a declared disc size
smaller than one filesystem block.
A crafted one-zone image with log2secsize 9 and disc_size 1 can pass map
checksum validation and mount. A subsequent statfs then reports zero
f_blocks from adfs_map_statfs(), and adfs_statfs() divides by that zero
while deriving f_ffree.
Reject disc records whose declared disc size is smaller than one
filesystem block.
Assisted-by: Codex:gpt-5.5-cyber-preview
---
fs/adfs/super.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/fs/adfs/super.c b/fs/adfs/super.c
index a4cd0a5159dd..cb8f3919e3bb 100644
--- a/fs/adfs/super.c
+++ b/fs/adfs/super.c
@@ -73,6 +73,10 @@ static int adfs_checkdiscrecord(struct adfs_discrecord *dr)
if (le32_to_cpu(dr->disc_size_high) >> dr->log2secsize)
return 1;
+ /* disc size must contain at least one filesystem block */
+ if (adfs_disc_size(dr) < (1ULL << dr->log2secsize))
+ return 1;
+
/*
* Maximum idlen is limited to 16 bits for new directories by
* the three-byte storage of an indirect disc address. For
--
2.43.0
next prev parent reply other threads:[~2026-06-28 22:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-05 18:37 [PATCH] adfs: reject disc records smaller than one filesystem block Samuel Moelius
2026-06-10 20:24 ` Kees Cook
2026-06-28 22:01 ` [PATCH v2 0/2] " Samuel Moelius
2026-06-28 22:01 ` Samuel Moelius [this message]
2026-06-28 23:16 ` [PATCH v2 1/2] " Russell King
2026-06-29 11:07 ` Samuel Moelius
2026-06-29 11:34 ` Russell King
2026-06-29 11:45 ` Samuel Moelius
2026-06-29 12:07 ` Russell King
2026-06-28 22:01 ` [PATCH v2 2/2] selftests: filesystems: add ADFS mount validation test Samuel Moelius
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260628220126.94212-2-sam.moelius@trailofbits.com \
--to=sam.moelius@trailofbits.com \
--cc=brauner@kernel.org \
--cc=iwasbaeyz@gmail.com \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rmk+kernel@armlinux.org.uk \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.