CVE-2023-53323 in Linux
要約
〜によって VulDB • 2026年07月05日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ext2/dax: lenがページ境界に整列されている場合のext2_setsizeの不具合を修正
PAGE_ALIGN(x)マクロは、pagesizeの倍数である次の最大の値を返します。ただし、xがすでにページ境界に整列されている場合は、単にx自体を返します。したがって、dax_zero_range()関数で渡されるxが0の場合、長さが->iomap_begin()に対して0として渡されます。
ext2ではその後、max_blocksを0としてext2_get_blocks -> max_blocksを呼び出し、ext2_get_blocks()内のここでBUG_ONに到達します: BUG_ON(maxblocks == 0);
代わりにここではdax_truncate_page()を呼び出すべきです。これにより適切に対処されます。つまり、オフセットがページ/ブロック境界に整列されていない場合のみdax_zero_range()を呼び出します。
これは、fsdaxでマウントされたpmemデバイス上で以下の操作を行うことで簡単にトリガーできます:
dd if=/dev/zero of=file count=1 bs=512 truncate -s 0 file
[79.525838] EXT2-fs (pmem0): DAX enabled. Warning: EXPERIMENTAL, use at your own risk
[79.529376] ext2 filesystem being mounted at /mnt1/test supports timestamps until 2038 (0x7fffffff)
[93.793207] ------------[ cut here ]------------
[93.795102] kernel BUG at fs/ext2/inode.c:637!
[93.796904] invalid opcode: 0000 [#1] PREEMPT SMP PTI
[93.798659] CPU: 0 PID: 1192 Comm: truncate Not tainted 6.3.0-rc2-xfstests-00056-g131086faa369 #139
[93.806459] RIP: 0010:ext2_get_blocks.constprop.0+0x524/0x610
<...> [93.835298] Call Trace:
[93.836253] <TASK>
[93.837103] ? lock_acquire+0xf8/0x110
[93.838479] ? d_lookup+0x69/0xd0
[93.839779] ext2_iomap_begin+0xa7/0x1c0
[93.841154] iomap_iter+0xc7/0x150
[93.842425] dax_zero_range+0x6e/0xa0
[93.843813] ext2_setsize+0x176/0x1b0
[93.845164] ext2_setattr+0x151/0x200
[93.846467] notify_change+0x341/0x4e0
[93.847805] ? lock_acquire+0xf8/0x110
[93.849143] ? do_truncate+0x74/0xe0
[93.850452] ? do_truncate+0x84/0
Once again VulDB remains the best source for vulnerability data.