[Bug 272840] too-large root_icb.len on UDF file system causes crash
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272840] too-large root_icb.len on UDF file system causes crash"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272840] too-large root_icb.len on UDF file system causes crash"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 272840] too-large root_icb.len on UDF file system causes crash"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 31 Jul 2023 11:13:13 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=272840 Bug ID: 272840 Summary: too-large root_icb.len on UDF file system causes crash Product: Base System Version: CURRENT Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: rtm@lcs.mit.edu The attached corrupt UDF image claims a root directory file entry length of root_icb.len=64650 (one might expect 2048). During mount, udf_readdevblks() rounds this up to 65536, and this line in getblkx() increases it to 67584: maxsize = size + (offset & PAGE_MASK); getnewbuf_kva() further increases the size to 81920. On an INVARIANTS kernel, this KASSERT fails in bufkva_alloc(): KASSERT(maxsize <= maxbcachebuf, ("bufkva_alloc kva too large %d %u", maxsize, maxbcachebuf)); panic: bufkva_alloc kva too large 81920 65536 On a non-INVARIANTS CURRENT kernel, this leads to a kernel page fault during unmount. On a stock 13.1 kernel, nothing bad happens right away but eventually file system problems arise. Here's the back-trace on an INVARIANTS kernel: # mdconfig -f udf4a.iso # mount_udf /dev/md0 /mnt panic: bufkva_alloc kva too large 81920 65536 panic() at panic+0x26 bufkva_alloc() at bufkva_alloc+0x104 getnewbuf_kva() at getnewbuf_kva+0x2a getnewbuf() at getnewbuf+0xec getblkx() at getblkx+0x188 breadn_flags() at breadn_flags+0x56 udf_readdevblks() at udf_readdevblks+0x52 udf_mountfs() at udf_mountfs+0x574 udf_mount() at udf_mount+0x19c vfs_domount_first() at vfs_domount_first+0x1cc vfs_domount() at vfs_domount+0x26c vfs_donmount() at vfs_donmount+0x82c sys_nmount() at sys_nmount+0x5e syscallenter() at syscallenter+0xe0 ecall_handler() at ecall_handler+0x18 do_trap_user() at do_trap_user+0xf2 cpu_exception_handler_user() at cpu_exception_handler_user+0x72 --- syscall (378, FreeBSD ELF64, nmount) -- You are receiving this mail because: You are the assignee for the bug.