{"id":"CVE-2026-98467","kind":"vulnerability","aliases":["CVE-2026-98467"],"related":[],"title":"Linux kernel KVM arm64: null pointer dereference during nested guest teardown","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: nv: Fix null ptr deref on nested wp/unmap, teardown race\n\nCommit 7270cc9157f4 (\"KVM: arm64: nv: Handle VNCR_EL2 invalidation from MMU\nnotifiers\") introduced VNCR_EL2 invalidation in both kvm_nested_s2_unmap()\nand kvm_nested_s2_wp().\n\nHowever at the point of this being performed concurrent stage 2 teardown of\na nested guest can cause kvm->arch.mmu.pgt to be set to NULL.\n\nThis happens in kvm_flush_shadow_all() -> kvm_arch_flush_shadow_all() ->\nkvm_free_stage2_pgd() and is performed under the kvm->mmu_lock.\n\nCommit ec14c272408a (\"KVM: arm64: nv: Unmap/flush shadow stage 2 page\ntables\") introduced the teardown of the entire nested MMU range, which then\ninvokes stage2_apply_range() with resched=true:\n\nmmu_notifier_invalidate_range_start()\n  -> ... -> kvm_mmu_notifier_invalidate_range_start()\n    -> kvm_mmu_unmap_gfn_range()\n      -> kvm_unmap_gfn_range()\n        -> kvm_nested_s2_unmap()\n          -> kvm_stage2_unmap_range()\n            -> __unmap_stage2_range()\n                -> stage2_apply_range()\n\nThis means that stage2_apply_range() can drop the kvm->mmu_lock and thus\nconcurrent progress can be made in lockstep with\nkvm_arch_flush_shadow_all().\n\nIf kvm_arch_flush_shadow_all() advances ahead of stage2_apply_range() and\ncompletes its operation it guarantees a NULL pointer deref.\n\nSince kvm_free_stage2_pgd() is performed under the kvm->mmu_lock this will\neither be observed NULL or not and serialised against\nkvm_free_stage2_pgd().\n\nResolve the issue by abstracting the invalidation to a new function,\nkvm_invalidate_vncr_ipa_all(), and check that the pgt is non-NULL before\ndereferencing it.","summary":"A race in the arm64 KVM nested virtualization code can set the stage 2 page table pointer to NULL while an unmap or write-protect operation is still using it, causing a kernel null pointer dereference. The sources describe a crash on the host kernel, and the text does not say whether an attacker can trigger it from a guest.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["arm64","kvm","linux-kernel","nested-virtualization","runtime"],"not_affected_if":["no-nested-virtualization","x86-host"],"how_to_check":"- Run `uname -r` and compare the kernel version against the fixed kernel releases in the NVD entry.\n- Check whether the host uses arm64 KVM with nested virtualization enabled (unknown from the sources; look for `nv` options on KVM hosts).","fix":"- Update the Linux kernel to a release that includes the upstream fix (the exact version is unknown from the sources; check the NVD entry or the distribution advisory).","status":"open","published_at":"2026-10-18T16:16:57+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","triaged_at":"2026-10-25T05:27:10+00:00","updated_at":"2026-10-25T05:27:10+00:00","category":"runtime","confidence":0.5,"triage":{"at":"2026-10-25T05:27:10Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Linux kernel to a release that includes the upstream fix (the exact version is unknown from the sources; check the NVD entry or the distribution advisory).","reach":"unknown","title":"Linux kernel KVM arm64: null pointer dereference during nested guest teardown","impact":"low","summary":"A race in the arm64 KVM nested virtualization code can set the stage 2 page table pointer to NULL while an unmap or write-protect operation is still using it, causing a kernel null pointer dereference. The sources describe a crash on the host kernel, and the text does not say whether an attacker can trigger it from a guest.","category":"runtime","nicknames":[],"who_cares":["linux-kernel","kvm","arm64","nested-virtualization"],"confidence":0.5,"needs_auth":"unknown","worst_case":"Host kernel crashes from a null pointer dereference during guest teardown","analyst_note":"Confirm the fixed kernel versions and whether a guest can trigger the race, using the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-98467.","how_to_check":"- Run `uname -r` and compare the kernel version against the fixed kernel releases in the NVD entry.\n- Check whether the host uses arm64 KVM with nested virtualization enabled (unknown from the sources; look for `nv` options on KVM hosts).","needs_analyst":true,"not_affected_if":["x86-host","no-nested-virtualization"],"who_is_affected":"Only arm64 hosts running KVM with nested virtualization, where a nested guest is torn down while its VNCR_EL2 invalidation runs, are described as affected. Hosts on x86, or arm64 hosts without nested KVM, can likely skip it, though the sources do not state this explicitly.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000725,"input_tokens":3981,"output_tokens":654,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-98467':14A,17A '2':40B,147C,194C '7270cc9157f4':111C 'abstract':329C 'advanc':282C 'ahead':283C 'appli':210C,247C,253C,286C 'arch':170C,272C,278C 'arch.mmu.pgt':156C 'arm64':4A,18B,31B,99C,113C,189C 'attack':81B 'caus':58B,154C 'check':342C 'code':35B 'commit':110C,186C 'complet':289C 'concurr':145C,263C 'crash':68B 'cve':12A,15A 'deref':104C,297C 'derefer':7A,63B 'dereferenc':351C 'describ':66B 'drop':256C 'ec14c272408a':187C 'either':312C 'el2':117C,124C 'entir':202C 'fix':101C 'flush':166C,171C,273C,279C 'follow':93C 'free':175C,300C,322C 'function':335C 'gfn':229C,233C 'guarante':293C 'guest':10A,87B,152C 'handl':115C 'happen':163C 'host':71B 'howev':137C 'introduc':122C,197C 'invalid':118C,125C,217C,223C,331C,337C 'invok':208C 'ipa':339C 'issu':327C 'kernel':2A,22B,60B,72B,91C 'kvm':3A,19B,32B,98C,112C,128C,133C,155C,165C,169C,174C,183C,188C,220C,226C,231C,235C,239C,258C,271C,277C,299C,307C,321C,336C 'linux':1A,21B,90C 'linux-kernel':20B 'lock':185C,260C,309C 'lockstep':269C 'made':267C 'mean':250C 'mmu':120C,184C,204C,215C,221C,227C,259C,308C 'nest':9A,24B,33B,106C,129C,134C,151C,203C,236C 'nested-virtu':23B 'new':334C 'non':348C 'non-nul':347C 'notifi':121C,216C,222C 'null':5A,45B,61B,102C,161C,295C,315C,349C 'nv':100C,114C,190C 'observ':314C 'oper':53B,291C 'page':41B,195C 'perform':144C,180C,304C 'pgd':177C,302C,324C 'pgt':345C 'point':140C 'pointer':6A,43B,62B,296C 'progress':264C 'protect':52B 'ptr':103C 'race':28B,109C 'rang':205C,211C,218C,224C,230C,234C,242C,245C,248C,254C,287C 'resch':213C 'resolv':97C,325C 'runtim':26B 's2':130C,135C,237C 'say':78B 'serialis':319C 'set':37B,159C 'shadow':167C,172C,192C,274C,280C 'sinc':298C 'sourc':65B 'stage':39B,146C,193C 'stage2':176C,209C,240C,244C,246C,252C,285C,301C,323C 'start':219C,225C 'still':55B 'tabl':42B,196C 'teardown':11A,108C,148C,199C 'text':75B 'thus':262C 'trigger':83B 'true':214C 'unmap':48B,131C,228C,232C,238C,241C,243C 'unmap/flush':191C 'use':56B 'virtual':25B,34B 'vncr':116C,123C,338C 'vulner':94C 'whether':79B 'wp':136C 'wp/unmap':107C 'write':51B 'write-protect':50B","nicknames":[],"mitigations":[],"who_affected":"Only arm64 hosts running KVM with nested virtualization, where a nested guest is torn down while its VNCR_EL2 invalidation runs, are described as affected. Hosts on x86, or arm64 hosts without nested KVM, can likely skip it, though the sources do not state this explicitly.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-18T16:16:57+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98467","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98467","severity":null,"published_at":"2026-10-18T16:16:57+00:00","modified_at":"2026-10-19T10:18:56+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","fetched_at":"2026-10-23T22:28:56+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}