{"id":40939,"date":"2026-10-19T00:31:37","date_gmt":"2026-10-18T16:31:37","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98467"},"modified":"2026-10-19T00:31:37","modified_gmt":"2026-10-18T16:31:37","slug":"cve-2026-98467","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98467","title":{"rendered":"CVE-2026-98467 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: nv: Fix n"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>KVM: arm64: nv: Fix null ptr deref on nested wp\/unmap, teardown race<\/p>\n<p>Commit 7270cc9157f4 (&#8220;KVM: arm64: nv: Handle VNCR_EL2 invalidation from MMU<br \/>\nnotifiers&#8221;) introduced VNCR_EL2 invalidation in both kvm_nested_s2_unmap()<br \/>\nand kvm_nested_s2_wp().<\/p>\n<p>However at the point of this being performed concurrent stage 2 teardown of<br \/>\na nested guest can cause kvm-&gt;arch.mmu.pgt to be set to NULL.<\/p>\n<p>This happens in kvm_flush_shadow_all() -&gt; kvm_arch_flush_shadow_all() -&gt;<br \/>\nkvm_free_stage2_pgd() and is performed under the kvm-&gt;mmu_lock.<\/p>\n<p>Commit ec14c272408a (&#8220;KVM: arm64: nv: Unmap\/flush shadow stage 2 page<br \/>\ntables&#8221;) introduced the teardown of the entire nested MMU range, which then<br \/>\ninvokes stage2_apply_range() with resched=true:<\/p>\n<p>mmu_notifier_invalidate_range_start()<br \/>\n  -&gt; &#8230; -&gt; kvm_mmu_notifier_invalidate_range_start()<br \/>\n    -&gt; kvm_mmu_unmap_gfn_range()<br \/>\n      -&gt; kvm_unmap_gfn_range()<br \/>\n        -&gt; kvm_nested_s2_unmap()<br \/>\n          -&gt; kvm_stage2_unmap_range()<br \/>\n            -&gt; __unmap_stage2_range()<br \/>\n                -&gt; stage2_apply_range()<\/p>\n<p>This means that stage2_apply_range() can drop the kvm-&gt;mmu_lock and thus<br \/>\nconcurrent progress can be made in lockstep with<br \/>\nkvm_arch_flush_shadow_all().<\/p>\n<p>If kvm_arch_flush_shadow_all() advances ahead of stage2_apply_range() and<br \/>\ncompletes its operation it guarantees a NULL pointer deref.<\/p>\n<p>Since kvm_free_stage2_pgd() is performed under the kvm-&gt;mmu_lock this will<br \/>\neither be observed NULL or not and serialised against<br \/>\nkvm_free_stage2_pgd().<\/p>\n<p>Resolve the issue by abstracting the invalidation to a new function,<br \/>\nkvm_invalidate_vncr_ipa_all(), and check that the pgt is non-NULL before<br \/>\ndereferencing it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>KVM: arm64: nv: Fix null ptr deref on nested wp\/unmap, teardown race<\/p>\n<p>Commit 7270cc9157f4 (&#8220;KVM: arm64: nv: Handle VNCR_EL2 invalid<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-40939","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/40939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=40939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=40939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=40939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}