mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
affs: validate blocks before freeing them
affs_free_block() accepts block numbers from on-disk file block tables
when truncating or unlinking files. The function currently rejects only
block numbers greater than s_partition_size before subtracting
s_reserved and using the result to index the in-memory bitmap descriptor
array.
That check still accepts reserved blocks and the one-past-end block at
s_partition_size. A crafted image can therefore make the subtraction
underflow or make the computed bitmap index equal to s_bmap_count,
leading to an out-of-bounds access on s_bitmap before the bitmap block is
read and updated.
Use the existing AFFS block validity helper so freeing uses the same
range as block reads and writes: s_reserved <= block < s_partition_size.
Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
CC: stable@vger.kernel.org
Assisted-by: Codex:gpt-5.5
Signed-off-by: Kyle Zeng <kylebot@openai.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
194164a843
commit
78ea2058ab
|
|
@ -46,7 +46,7 @@ affs_free_block(struct super_block *sb, u32 block)
|
|||
|
||||
pr_debug("%s(%u)\n", __func__, block);
|
||||
|
||||
if (block > sbi->s_partition_size)
|
||||
if (!affs_validblock(sb, block))
|
||||
goto err_range;
|
||||
|
||||
blk = block - sbi->s_reserved;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user