{"id":"CVE-2026-98464","revision":"c435fbd41e624093bc7c65a7c0f20abc","records":[{"revision":"c435fbd41e624093bc7c65a7c0f20abc","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-98464","aliases":[],"title":"RISC-V: KVM: Synchronize hrtimer callback during teardown","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nRISC-V: KVM: Synchronize hrtimer callback during teardown\n\nThe non-Sstc hrtimer callback clears next_set before its final uses of\nthe enclosing vCPU.  If teardown observes next_set as false while the\ncallback is still running, kvm_riscv_vcpu_timer_cancel() skips\nhrtimer_cancel() and kvm_destroy_vcpus() can free the vCPU before the\ncallback enters kvm_riscv_vcpu_set_interrupt().\n\nA guest can arm the timer with SBI TIME and request shutdown with SBI\nlegacy shutdown or SRST.  A VMM that honors KVM_EXIT_SYSTEM_EVENT and\ndestroys the VM supplies the teardown side of the race; no post-launch\nhost ioctl is needed to arm or request teardown.\n\nOn upstream master 62cc90241548, generic KASAN reported:\n\n  BUG: KASAN: slab-use-after-free in do_raw_spin_lock\n  Write of size 4 at addr ff60000005e58898\n\n  kvm_riscv_vcpu_set_interrupt\n  kvm_riscv_vcpu_hrtimer_expired\n  __hrtimer_run_queues\n  hrtimer_interrupt\n\nThe object was allocated by KVM_CREATE_VCPU and freed concurrently by:\n\n  kvm_destroy_vcpus\n  kvm_arch_destroy_vm\n  kvm_destroy_vm\n  __fput\n\nFor deterministic validation, I added mdelay(1000) immediately after\nthe existing next_set = false assignment.  This only widens the\nexisting post-clear callback window.  A no-delay trace build naturally\nreached the callback-after-teardown-start/before-deinit ordering in 12\nof 200 runs, but 1,500 stock-kernel stress iterations did not produce a\nKASAN report, so natural reproduction is timing-sensitive.\n\nAlways invoke hrtimer_cancel() for an initialized timer.  Preserve the\nexisting -EINVAL result when the timer is no longer set, but only after\nsynchronizing with a running callback.\n\nWith this patch, hrtimer_cancel() blocked for the full widened callback\nwindow before vCPU destruction.  KASAN reported no error in 100\nfixed-and-widened runs or 200 fix-only timing-sweep runs.","state":0,"publishedAt":"2026-10-18T15:15:16.624+00:00","modifiedAt":"2026-10-19T09:20:02.501+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/riscv/kvm/vcpu_timer.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22\",\n                            \"lessThan\": \"9bdbae64ae0dab93041ebc57ec4e93def793fc2d\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22\",\n                            \"lessThan\": \"2af03b606aadaaeb386658ef798c79bdcdef87c1\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22\",\n                            \"lessThan\": \"e66aced74f0122380603c9910a71d77618b28f0e\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22\",\n                            \"lessThan\": \"ea91f05a55b807ead3166546a2c75f4185ca645f\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22\",\n                            \"lessThan\": \"3cc6184bd5920c9685d87f4e260568feba08650d\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22\",\n                            \"lessThan\": \"aaad136d56d91252517272b68cd533e5714698d5\",\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/riscv/kvm/vcpu_timer.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"5.16\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \"0\",\n                            \"lessThan\": \"5.16\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.1.189\",\n                            \"lessThanOrEqual\": \"6.1.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.6.158\",\n                            \"lessThanOrEqual\": \"6.6.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.12.112\",\n                            \"lessThanOrEqual\": \"6.12.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.18.55\",\n                            \"lessThanOrEqual\": \"6.18.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.2.9\",\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/9bdbae64ae0dab93041ebc57ec4e93def793fc2d","https://git.kernel.org/stable/c/2af03b606aadaaeb386658ef798c79bdcdef87c1","https://git.kernel.org/stable/c/e66aced74f0122380603c9910a71d77618b28f0e","https://git.kernel.org/stable/c/ea91f05a55b807ead3166546a2c75f4185ca645f","https://git.kernel.org/stable/c/3cc6184bd5920c9685d87f4e260568feba08650d","https://git.kernel.org/stable/c/aaad136d56d91252517272b68cd533e5714698d5"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-98464","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-98464","identifiers":["CVE-2026-98464"]},"retained":false,"historicalAffected":[]}],"coverage":[]}