CVE-2026-89836 in Linux
要約
〜によって VulDB • 2026年09月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
f2fs: 大きなfolioの無効化処理後にputされた際のfolio_nr_pages()における競合状態を修正
v6.18ベースのAndroidシステムでは、[1]に示されるように、壊れたxarrayスロットの状態に関連するlivelock(ライブロック)および不正なページ統計が継続的に発生しています。f2fs内の大きなfolio操作を調査した結果、以下の競合状態を発見し、refcountとfolio_lockをドロップする前にnr_pagesを取得することでこれを修正しました。
f2fs_get_read_data_folio()は、ページキャッシュから大きなfolioを無効化する際に、folio_nr_pages()よりも先にf2fs_folio_put()を呼び出します。これによりfolioがロック解除され、呼び出し元の参照カウントがドロップされるため、競合するtruncate処理やfolio分割によって、無効化範囲の計算が行われる前に複合folio(compound folio)が縮小または解放されてしまう可能性があります。その結果、小さすぎる範囲となり、mapping->i_pages内に分割されたサブfoliosが残され、これが後にtruncateおよびreclaimと悪影響を及ぼすことがあります(staleなxarrayエントリや、folio->mappingがtruncate対象のmappingと一致しなくなった場合における不正なページ状態)。
[1]
PID: 2594 TASK: ffffff8169b81580 CPU: 7 COMMAND: "Thread-3" #0 [ffffffc08ef2b8a0] xas_load at ffffffe52d1f42a4
#1 [ffffffc08ef2b900] find_get_entries at ffffffe52c185798
#2 [ffffffc08ef2bb60] truncate_inode_pages_range at ffffffe52c19e83c
#3 [ffffffc08ef2bbc0] truncate_inode_pages_final at ffffffe52c19ec2c
#4 [ffffffc08ef2bc20] f2fs_evict_inode at ffffffe52c4c8400
#5 [ffffffc08ef2bcc0] evict at ffffffe52c2de9f4
#6 [ffffffc08ef2bd00] iput at ffffffe52c2db1b4
#7 [ffffffc08ef2bd30] dentry_unlink_inode at ffffffe52c2d7204
#8 [ffffffc08ef2bd50] __dentry_kill at ffffffe52c2d3dcc
#9 [ffffffc08ef2bd80] dput at ffffffe52c2d3c3c
#10 [ffffffc08ef2bda0] __fput at ffffffe52c2b0a7c
#11 [ffffffc08ef2bde0] ____fput at ffffffe52c2b1034
#12 [ffffffc08ef2bdf0] task_work_run at ffffffe52beea200
#13 [ffffffc08ef2be20] exit_to_user_mode_loop at ffffffe52bfbc17c
#14 [ffffffc08ef2be80] el0_svc at ffffffe52d1f8e54
#15 [ffffffc08ef2beb0] el0t_64_sync_handler at ffffffe52d1f8d10
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.