linux/fs/udf
Seohyeon Maeng 68013a9bd4 udf: fix partition descriptor append bookkeeping
[ Upstream commit 08841b06fa ]

Mounting a crafted UDF image with repeated partition descriptors can
trigger a heap out-of-bounds write in part_descs_loc[].

handle_partition_descriptor() deduplicates entries by partition number,
but appended slots never record partnum. As a result duplicate
Partition Descriptors are appended repeatedly and num_part_descs keeps
growing.

Once the table is full, the growth path still sizes the allocation from
partnum even though inserts are indexed by num_part_descs. If partnum is
already aligned to PART_DESC_ALLOC_STEP, ALIGN(partnum, step) can keep
the old capacity and the next append writes past the end of the table.

Store partnum in the appended slot and size growth from the next append
count so deduplication and capacity tracking follow the same model.

Fixes: ee4af50ca9 ("udf: Fix mounting of Win7 created UDF filesystems")
Cc: stable@vger.kernel.org
Signed-off-by: Seohyeon Maeng <bioloidgp@gmail.com>
Link: https://patch.msgid.link/20260310081652.21220-1-bioloidgp@gmail.com
Signed-off-by: Jan Kara <jack@suse.cz>
[ replaced kzalloc_objs() helper with equivalent kcalloc() ]
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-06-19 13:33:42 +02:00
..
balloc.c udf: prevent integer overflow in udf_bitmap_free_blocks() 2024-08-19 05:45:37 +02:00
dir.c udf: Convert udf_readdir() to new directory iteration 2024-10-22 15:40:38 +02:00
directory.c udf: Fix directory iteration for longer tail extents 2025-09-04 14:28:44 +02:00
ecma_167.h udf: Get rid of 0-length arrays in struct fileIdentDesc 2021-08-11 16:54:44 +02:00
file.c udf: Do not update file length for failed writes to inline files 2023-03-10 09:39:59 +01:00
ialloc.c udf: Fix error handling in udf_new_inode() 2022-01-27 11:05:02 +01:00
inode.c fs: udf: fix OOB read in lengthAllocDescs handling 2025-10-19 16:21:38 +02:00
Kconfig docs: filesystems: fix renamed references 2020-04-20 15:45:22 -06:00
lowlevel.c udf: stop using ioctl_by_bdev 2020-05-04 10:13:42 -06:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
misc.c udf: reject descriptors with oversized CRC length 2026-06-01 17:35:22 +02:00
namei.c udf: Fix bogus checksum computation in udf_rename() 2024-10-22 15:40:39 +02:00
osta_udf.h udf: Get rid of 0-length arrays 2021-08-11 16:54:44 +02:00
partition.c udf: Remove pointless union in udf_inode_info 2020-09-29 17:21:54 +02:00
super.c udf: fix partition descriptor append bookkeeping 2026-06-19 13:33:42 +02:00
symlink.c fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
truncate.c udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size 2022-12-21 17:36:36 +01:00
udf_i.h udf: Preserve link count of system files 2023-03-10 09:40:00 +01:00
udf_sb.h udf: Define EFSCORRUPTED error code 2023-03-10 09:39:46 +01:00
udfdecl.h udf: Allocate name buffer in directory iterator on heap 2024-11-17 15:06:26 +01:00
udfend.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
udftime.c udf: udftime: prevent overflow in udf_disk_stamp_to_time() 2024-07-05 09:14:28 +02:00
unicode.c udf: Fix uninitialized array access for some pathnames 2023-07-27 08:46:58 +02:00