CVE-2026-98918 in Linux情報

要約

〜によって VulDB • 2026年10月23日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

mm/damon/ops-common: damon_ptep_mkold() でページアライメントされたアドレスを使用する

__damon_va_prepare_access_check() はリージョン内のランダムなバイトアドレスを選択し、r->sampling_addr に格納します。damon_va_mkold() はこれをページテーブルウォークに渡しますが、これは damon_ptep_mkold() に対してサンプル対象のページアドレスとして渡されます:

damon_va_mkold(mm, r->sampling_addr) damon_va_walk_page_range(mm, addr, addr + 1) damon_mkold_pmd_entry() damon_ptep_mkold(pte, vma, addr) ptep_test_and_clear_young(vma, addr, pte) mmu_notifier_clear_young(mm, addr, addr + PAGE_SIZE)

arm64 において、コミット 6f0e1142173a ("arm64: mm: support batch clearing of the young flag for large folios") より前では、contpte ヘルパーはアライメントされた下方向のページテーブルポインタから CONT_PTES エントリを正確にウォークし、@addr は各エントリへ渡すためだけに使用されていたため、非整列値でも害はありませんでした:

ptep = contpte_align_down(ptep); addr = ALIGN_DOWN(addr, CONT_PTE_SIZE); for (i = 0; i < CONT_PTES; i++, ptep++, addr += PAGE_SIZE)

現在ではウォークする範囲は @addr から派生します:end = addr + nr * PAGE_SIZE を CONT_PTE_SIZE に切り上げて丸めます。contpte ブロックの最後のページでのサンプルの場合、サブページのオフセットにより end がブロック境界をわずかに超えるため、切り上げ処理によって 1 つ分先のブロックに到達し、ウォークはサンプル対象外のブロックにある CONT_PTES エントリの PTE_AF をクリアしてしまいます。ページテーブルページの最後のブロックの場合、それらのエントリはそのページの末尾を超えているため、ウォークは次のページに対して書き込みを行います。

arm64 (EC2 c/m6g.4xlarge) でのフル 7.1/7.2 カーネル自己テストスイート実行時にトリガーされます。カーネルは DAMON テスト中またはその直後に時々クラッシュします。

オーバーランによる影響は、ページテーブルの次に位置する偶然のページに依存するため、単一のシグネチャはありません。もしそのページが読み取り専用であれば、サンプルパス自体で書き込みフォールトが発生します:

Unable to handle kernel write to read-only memory at virtual address ffff0003c5d2d000 FSC = 0x0f: level 3 permission fault CM = 0, WnR = 1, TnD = 0, TagAccess = 0 CPU: 10 UID: 0 PID: 3487 Comm: kdamond.2 pc : contpte_test_and_clear_young_ptes+0x70/0xc0 lr : damon_ptep_mkold+0x1e8/0x1f8 Call trace: contpte_test_and_clear_young_ptes+0x70/0xc0 (P) damon_mkold_pmd_entry+0x150/0x170 walk_pmd_range+0x110/0x2b0 walk_pud_range+0x10c/0x208 walk_pgd_range+0x134/0x258 __walk_page_range+0x98/0x1b0 walk_page_range_vma_unsafe+0x90/0x148 walk_page_range_vma+0x28/0x40 damon_va_walk_page_range+0x114/0x2b8 damon_va_prepare_access_checks+0xec/0x1a8 kdamond_fn+0x534/0x770 kthread+0x128/0x138 ret_from_fork+0x10/0x20

そうでない場合、つまりページが書き込み可能な場合は、PTE_AF のクリアは静かに成功し、被害はその後にそのページを所有している何らかの処理においてのみ表面化するため、バックトレースは DAMON と無関係であり、実行ごとに異なります。

damon_ptep_mkold() 内の ptep_test_and_clear_young() コールに対してページアライメントされたアドレスを渡します。これは DAMON が contpte_test_and_clear_young_ptes() に到達できる唯一の場所です。整列されたアドレスは他には参照されず、r->sampling_addr そのものは変更されないため、サンプルおよびリージョン管理のセマンティクスは変わりません。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-425689

EPSS

0.00198

アクティビティ

非常低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!