In the Linux kernel, the following vulnerability has been resolved:ext4: fix OOB read when checking dotdot dirMounting a corrupted filesystem with directory which contains '.' direntry with rec_len == block size results in out-of-bounds read (lateron, when the corrupted directory is removed).ext4_empty_dir() assumes every ext4 directory contains at least '.'and '..' as directory entries in the first data block. It first loadsthe '.' dir entry, performs sanity checks by calling ext4_check_dir_entry()and then uses its rec_len member to compute the location of '..' direntry (in ext4_next_entry). It assumes the '..' dir entry fits into thesame data block.If the rec_len of '.' is precisely one block (4KB), it slips through thesanity checks (it is considered the last directory entry in the datablock) and leaves "struct ext4_dir_entry_2 *de" point exactly past thememory slot allocated to the data block. The following call toext4_check_dir_entry() on new value of de then dereferences this pointerwhich results in out-of-bounds mem access.Fix this by extending __ext4_check_dir_entry() to check for '.' direntries that reach the end of data block. Make sure to ignore the phonydir entries for checksum (by checking name_len for non-zero).Note: This is reported by KASAN as use-after-free in case anotherstructure was recently freed from the slot past the bound, but it isreally an OOB read.This issue was found by syzkaller tool.Call Trace:[ 38.594108] BUG: KASAN: slab-use-after-free in __ext4_check_dir_entry+0x67e/0x710[ 38.594649] Read of size 2 at addr ffff88802b41a004 by task syz-executor/5375[ 38.595158][ 38.595288] CPU: 0 UID: 0 PID: 5375 Comm: syz-executor Not tainted 6.14.0-rc7 #1[ 38.595298] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014[ 38.595304] Call Trace:[ 38.595308]
No PoCs from references.
- https://github.com/runwhen-contrib/helm-charts
- https://github.com/w4zu/Debian_security