{"id":"CVE-2026-89917","revision":"976ed2422f2a4b1fb9c6194c23a28e0b","records":[{"revision":"976ed2422f2a4b1fb9c6194c23a28e0b","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-89917","aliases":[],"title":"KVM: arm64: Handle VNCR TLB invalidation race with vcpu_put() VNCR unmapping","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: Handle VNCR TLB invalidation race with vcpu_put() VNCR unmapping\n\nWhile VNCR TLB invalidation always occurs under the MMU lock,\nvcpu_put() doesn't, while it unmaps the VNCR page.\n\nThe problem is that the invalidation evaluates vncr_tlb::cpu to\ndecide whether an unmapping needs to take place (cpu != -1) before\nperforming it. On the other hand, this_cpu_reset_vncr_fixmap()\nunconditionally unmaps if L1_VNCR_MAPPED is set.\n\nThese two obviously can race, with a TOCTOU pattern on the TLBI\npath, and a BUG_ON() on the vcpu_put() path. And the two can end-up\ncalling vncr_fixmap(-1), with extra lethal effects.\n\nMove the reset of vncr_tlb::cpu to -1 to a common function, and make\nthis update atomic so that only a single thread can reset the field\nand perform the corresponding unmap. The vcpu_put() still need to\nunconditionally unmap the current VNCR to close another ugly race.\n\nFinally, the assignment of vncr_tlb::cpu is moved to be kept in sync\nwith the actual mapping, similar to L1_VNCR_MAPPED being set.","state":0,"publishedAt":"2026-09-16T10:32:12.629+00:00","modifiedAt":"2026-10-19T08:54:51.694+00:00","affected":[{"ecosystem":"Vendor product","name":"Linux","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"product\": \"Linux\",\n                    \"vendor\": \"Linux\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\n                    \"programFiles\": [\n                        \"arch/arm64/kvm/nested.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"7270cc9157f474dfc46750a34c9d7defc686b2eb\",\n                            \"lessThan\": \"5cbd8761d001c11ada73b1753d772c4745a70e72\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"7270cc9157f474dfc46750a34c9d7defc686b2eb\",\n                            \"lessThan\": \"9065c1261f8a05c6a7a2d90048c7c0665ab2896d\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"7270cc9157f474dfc46750a34c9d7defc686b2eb\",\n                            \"lessThan\": \"38640bc32be3fcf9526d477155bc19d3f146231f\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        }\n                    ]\n                }"},{"ecosystem":"Vendor product","name":"Linux","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"product\": \"Linux\",\n                    \"vendor\": \"Linux\",\n                    \"defaultStatus\": \"affected\",\n                    \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\n                    \"programFiles\": [\n                        \"arch/arm64/kvm/nested.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"6.16\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \"0\",\n                            \"lessThan\": \"6.16\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.18.52\",\n                            \"lessThanOrEqual\": \"6.18.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.2.5\",\n                            \"lessThanOrEqual\": \"7.2.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.3\",\n                            \"lessThanOrEqual\": \"*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"original_commit_for_fix\"\n                        }\n                    ]\n                }"}],"metrics":[],"references":["https://git.kernel.org/stable/c/5cbd8761d001c11ada73b1753d772c4745a70e72","https://git.kernel.org/stable/c/9065c1261f8a05c6a7a2d90048c7c0665ab2896d","https://git.kernel.org/stable/c/38640bc32be3fcf9526d477155bc19d3f146231f"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-89917","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-89917","identifiers":["CVE-2026-89917"]},"retained":false,"historicalAffected":[]}],"coverage":[]}