Re: [PATCH] RISC-V: KVM: Synchronize hrtimer callback during teardown
Myeonghun Pak <[email protected]> Sat, 1 Aug 2026 01:28:56 +0900
| Newsgroups | org.infradead.lists.linux-riscv,org.infradead.lists.kvm-riscv,org.kernel.vger.kvm |
|---|---|
| Message-ID | <CAGEsz8EzBqC=0A_DgRCMQCfmAp8iKysAyzccJ1sDrQE9OaZY2g@mail.gmail.com> |
You're right. I'll add an Assisted-by trailer and drop [email protected] from the recipients in v2. Thanks, Myeonghun 2026년 7월 29일 (수) 오후 5:45, Greg KH <[email protected]>님이 작성: > > On Wed, Jul 29, 2026 at 01:42:24AM +0900, Myeonghun Pak wrote: > > The non-Sstc hrtimer callback clears next_set before its final uses of > > the enclosing vCPU. If teardown observes next_set as false while the > > callback is still running, kvm_riscv_vcpu_timer_cancel() skips > > hrtimer_cancel() and kvm_destroy_vcpus() can free the vCPU before the > > callback enters kvm_riscv_vcpu_set_interrupt(). > > > > A guest can arm the timer with SBI TIME and request shutdown with SBI > > legacy shutdown or SRST. A VMM that honors KVM_EXIT_SYSTEM_EVENT and > > destroys the VM supplies the teardown side of the race; no post-launch > > host ioctl is needed to arm or request teardown. > > > > On upstream master 62cc90241548, generic KASAN reported: > > > > BUG: KASAN: slab-use-after-free in do_raw_spin_lock > > Write of size 4 at addr ff60000005e58898 > > > > kvm_riscv_vcpu_set_interrupt > > kvm_riscv_vcpu_hrtimer_expired > > __hrtimer_run_queues > > hrtimer_interrupt > > > > The object was allocated by KVM_CREATE_VCPU and freed concurrently by: > > > > kvm_destroy_vcpus > > kvm_arch_destroy_vm > > kvm_destroy_vm > > __fput > > > > For deterministic validation, I added mdelay(1000) immediately after > > the existing next_set = false assignment. This only widens the > > existing post-clear callback window. A no-delay trace build naturally > > reached the callback-after-teardown-start/before-deinit ordering in 12 > > of 200 runs, but 1,500 stock-kernel stress iterations did not produce a > > KASAN report, so natural reproduction is timing-sensitive. > > > > Always invoke hrtimer_cancel() for an initialized timer. Preserve the > > existing -EINVAL result when the timer is no longer set, but only after > > synchronizing with a running callback. > > > > With this patch, hrtimer_cancel() blocked for the full widened callback > > window before vCPU destruction. KASAN reported no error in 100 > > fixed-and-widened runs or 200 fix-only timing-sweep runs. > > > > Fixes: 3a9f66cb25e1 ("RISC-V: KVM: Add timer functionality") > > Cc: [email protected] > > Signed-off-by: Myeonghun Pak <[email protected]> > > --- > > arch/riscv/kvm/vcpu_timer.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > AI disclosure: I used AI assistance during the audit and am treating the > > issue as public as required by Documentation/process/security-bugs.rst. > > The reproducer and full KASAN trace have not been posted publicly and > > are available on request. > > Then don't you need to add an "Assisted-by:" line to your patch? > > And as you posted this publicly, no need to cc: [email protected]. > > thanks, > > greg k-h _______________________________________________ linux-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-riscv