LinuxのLinux Kernelにおける無限ループに関する脆弱性
タイトル LinuxのLinux Kernelにおける無限ループに関する脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。arm64: contpteにおけるSMMU/ATSのフォルトに対するset_access_flags()の無効処理チェックが修正されました。contpte_ptep_set_access_flags()は、収集したptep_get()の値と要求されたエントリを比較して無効処理(no-op)を検出していました。ptep_get()はCONTブロック内のすべてのサブPTEからAF/dirtyをOR演算するため、兄弟のサブPTEがdirtyであるとターゲットが既にdirtyと見なされることがあります。収集した値がエントリと一致すると、ターゲットのサブPTEがハードウェア上でPTE_RDONLYを保持していても関数は0を返します。FEAT_HAFDBSを持つCPUでは、この収集されたビューに問題はありません。なぜならハードウェアは任意のサブPTEにAF/dirtyを設定でき、CPUのTLB動作はCONT範囲全体で効果的に収集されるためです。しかし、各ディスクリプタを個別に評価するページテーブルウォーカー(例えばDBM未対応のCPU、HTTU無しのSMMU、またはCD.TCRでHA/HDが無効な場合)は、変更されていないターゲットのサブPTEでフォルトを繰り返し無限フォルトループを引き起こす可能性があります。したがって、収集が兄弟のサブPTEのみが更新された場合に誤った無効処理を引き起こすことがあります。例えば、書き込みフォルトの場合、ターゲットは依然としてPTE_RDONLYを保持しており(PTE_RDONLY解除が必要です)、読み取りフォルトの場合はターゲットが依然としてPTE_AFを欠いています。修正として、無効処理を返す前に要求されたAF/dirty/write状態(__ptep_set_access_flags()と同じビット)に対して各サブPTEを生のPTE値でチェックするようにしました。書き込みビット展開の決定には引き続き生のターゲットPTEを使用します。Arm ARM(DDI 0487) D8.7.1("The Contiguous bit")によると、CONT範囲内の任意のサブPTEが有効なキャッシュ済み変換となる可能性があるため、ソフトウェアは範囲全体で一貫した属性を維持しなければなりません。

想定される影響 ・当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 ・当該ソフトウェアが扱う情報について、書き換えは発生しません。 ・当該ソフトウェアが完全に停止する可能性があります。 
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

公表日 2026年5月13日0:00
登録日 2026年6月29日11:19
最終更新日 2026年6月29日11:19
CVSS3.0 : 警告
スコア 5.5
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
影響を受けるシステム
Linux
Linux Kernel 6.13 以上 6.18.19 未満
Linux Kernel 6.19 以上 6.19.9 未満
Linux Kernel 6.9 以上 6.12.78 未満
Linux Kernel 7.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年06月29日]
  掲載
2026年6月29日11:19

NVD脆弱性情報
CVE-2026-43486
概要

In the Linux kernel, the following vulnerability has been resolved:

arm64: contpte: fix set_access_flags() no-op check for SMMU/ATS faults

contpte_ptep_set_access_flags() compared the gathered ptep_get() value
against the requested entry to detect no-ops. ptep_get() ORs AF/dirty
from all sub-PTEs in the CONT block, so a dirty sibling can make the
target appear already-dirty. When the gathered value matches entry, the
function returns 0 even though the target sub-PTE still has PTE_RDONLY
set in hardware.

For a CPU with FEAT_HAFDBS this gathered view is fine, since hardware may
set AF/dirty on any sub-PTE and CPU TLB behavior is effectively gathered
across the CONT range. But page-table walkers that evaluate each
descriptor individually (e.g. a CPU without DBM support, or an SMMU
without HTTU, or with HA/HD disabled in CD.TCR) can keep faulting on the
unchanged target sub-PTE, causing an infinite fault loop.

Gathering can therefore cause false no-ops when only a sibling has been
updated:
- write faults: target still has PTE_RDONLY (needs PTE_RDONLY cleared)
- read faults: target still lacks PTE_AF

Fix by checking each sub-PTE against the requested AF/dirty/write state
(the same bits consumed by __ptep_set_access_flags()), using raw
per-PTE values rather than the gathered ptep_get() view, before
returning no-op. Keep using the raw target PTE for the write-bit unfold
decision.

Per Arm ARM (DDI 0487) D8.7.1 ("The Contiguous bit"), any sub-PTE in a CONT
range may become the effective cached translation and software must
maintain consistent attributes across the range.

公表日 2026年5月14日1:16
登録日 2026年5月15日4:21
最終更新日 2026年5月14日1:16
関連情報、対策とツール
共通脆弱性一覧