| From a4e482def8533ebace517d9f67f1465841b1f982 Mon Sep 17 00:00:00 2001 |
| From: Christian Borntraeger <borntraeger@linux.ibm.com> |
| Date: Wed, 5 Aug 2026 13:04:53 +0200 |
| Subject: KVM: s390: Take srcu when importing watchpoint data |
| |
| From: Christian Borntraeger <borntraeger@linux.ibm.com> |
| |
| commit a4e482def8533ebace517d9f67f1465841b1f982 upstream. |
| |
| __import_wp_info() backs up the original guest memory contents of a |
| watchpoint with read_guest_abs(), which is kvm_read_guest() and therefore |
| resolves the memslot via __kvm_memslots(). That requires kvm->srcu (or |
| kvm->slots_lock) to be held, otherwise a concurrent memslot update can |
| free the memslots array under us once its SRCU grace period has elapsed. |
| |
| As this is not fast path, following lock ordering (mutex first, then |
| srcu) take the big hammer and hold the srcu for the full import. |
| |
| Fixes: 27291e2165b6 ("KVM: s390: hardware support for guest debugging") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com> |
| Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> |
| Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> |
| Message-ID: <20260805110455.7200-7-borntraeger@linux.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/s390/kvm/kvm-s390.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/arch/s390/kvm/kvm-s390.c |
| +++ b/arch/s390/kvm/kvm-s390.c |
| @@ -4389,8 +4389,10 @@ int kvm_arch_vcpu_ioctl_set_guest_debug( |
| /* enforce guest PER */ |
| kvm_s390_set_cpuflags(vcpu, CPUSTAT_P); |
| |
| - if (dbg->control & KVM_GUESTDBG_USE_HW_BP) |
| - rc = kvm_s390_import_bp_data(vcpu, dbg); |
| + if (dbg->control & KVM_GUESTDBG_USE_HW_BP) { |
| + scoped_guard(srcu, &vcpu->kvm->srcu) |
| + rc = kvm_s390_import_bp_data(vcpu, dbg); |
| + } |
| } else { |
| kvm_s390_clear_cpuflags(vcpu, CPUSTAT_P); |
| vcpu->arch.guestdbg.last_bp = 0; |