All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Claudio Imbrenda" <imbrenda@linux.ibm.com>
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Vasily Gorbik" <gor@linux.ibm.com>
Subject: Re: [GIT PULL v1 15/23] KVM: s390: ucontrol: Fix sca_clear_ext_call()
Date: Mon, 03 Aug 2026 17:09:38 +0000	[thread overview]
Message-ID: <20260803170939.460F11F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260803160924.236807-16-imbrenda@linux.ibm.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] UCONTROL VM external call injection fails or succeeds inconsistently depending on the host's hardware ESCA support.
--

--- Patch [15]: [GIT PULL v1 15/23] KVM: s390: ucontrol: Fix sca_clear_ext_call() ---
commit 4cf53d54c2a9bad47bf30203ae51ce4109c4612e
Author: Claudio Imbrenda <imbrenda@linux.ibm.com>

KVM: s390: ucontrol: Fix sca_clear_ext_call()

This commit addresses an issue where cleaning up a UCONTROL VM would touch
memory outside of the allocated ESCA block. It fixes this by avoiding ESCA
access for UCONTROL VMs and fencing the KVM_S390_INTERRUPT ioctl for them.

> diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
> index 2acdff130fa6c..6b3f97a7513b3 100644
> --- a/arch/s390/kvm/interrupt.c
> +++ b/arch/s390/kvm/interrupt.c
> @@ -45,13 +45,16 @@ static struct kvm_s390_gib *gib;
>  static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
>  {
>  	struct esca_block *sca = vcpu->kvm->arch.sca;
> -	union esca_sigp_ctrl sigp_ctrl = sca->cpu[vcpu->vcpu_id].sigp_ctrl;
> +	union esca_sigp_ctrl sigp_ctrl;
>  
>  	if (!kvm_s390_test_cpuflags(vcpu, CPUSTAT_ECALL_PEND))
>  		return 0;
> +	if (kvm_is_ucontrol(vcpu->kvm))
> +		return 0;

[Severity: Medium]
Will this cause pending software external calls to be ignored on hosts with
ESCA?

If the host supports ESCA and kvm_s390_use_sca_entries() is true, the system
will rely on sca_ext_call_pending(). By returning 0 here for UCONTROL VMs,
won't any pending software external calls be ignored?

[ ... ]

> @@ -60,13 +63,16 @@ static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
>  
>  static int sca_inject_ext_call(struct kvm_vcpu *vcpu, int src_id)
>  {
> -	struct esca_block *sca = vcpu->kvm->arch.sca;
> -	union esca_sigp_ctrl *sigp_ctrl = &sca->cpu[vcpu->vcpu_id].sigp_ctrl;
>  	union esca_sigp_ctrl old_val, new_val = {.scn = src_id, .c = 1};
> +	struct esca_block *sca = vcpu->kvm->arch.sca;
> +	union esca_sigp_ctrl *sigp_ctrl;
>  	int expect, rc;
>  
>  	BUG_ON(!kvm_s390_use_sca_entries());
> +	if (kvm_is_ucontrol(vcpu->kvm))
> +		return -EINVAL;

[Severity: Medium]
Does this create an ABI inconsistency where UCONTROL VMs behave differently
based on the host's hardware capabilities?

When userspace calls the KVM_S390_IRQ ioctl on a UCONTROL VM to inject
KVM_S390_INT_EXTERNAL_CALL, __inject_extcall() checks if the host
supports ESCA:

arch/s390/kvm/interrupt.c:__inject_extcall() {
    ...
    if (kvm_s390_use_sca_entries() && !kvm_s390_pv_cpu_get_handle(vcpu))
        return sca_inject_ext_call(vcpu, src_id);
    ...
}

If the host doesn't support ESCA, it bypasses sca_inject_ext_call() and
successfully queues the interrupt via the software fallback. 

But if the host does support ESCA, it calls sca_inject_ext_call() which
will now hit this check and return -EINVAL instead of queuing it.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260803160924.236807-1-imbrenda@linux.ibm.com?part=15

  reply	other threads:[~2026-08-03 17:09 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-03 16:09 [GIT PULL v1 00/23] KVM: s390: Misc KVM and vfio-ccw fixes Claudio Imbrenda
2026-08-03 16:09 ` [GIT PULL v1 01/23] s390/vfio_ccw: Free all memory if cp_init() fails Claudio Imbrenda
2026-08-03 16:28   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 02/23] s390/vfio_ccw: Limit the number of channel program segments Claudio Imbrenda
2026-08-03 16:32   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 03/23] s390/vfio_ccw: Fix out of bounds check on CCW array Claudio Imbrenda
2026-08-03 16:17   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 04/23] s390/vfio_ccw: Ensure first IDAW remains constant Claudio Imbrenda
2026-08-03 16:24   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 05/23] s390/vfio_ccw: Calculate idal length based on idaw type Claudio Imbrenda
2026-08-03 16:24   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 06/23] s390/vfio_ccw: Ensure index for read/write regions are within range Claudio Imbrenda
2026-08-03 16:34   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 07/23] s390/vfio_ccw: Cancel existing workqueues Claudio Imbrenda
2026-08-03 16:41   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 08/23] s390/vfio_ccw: Move cp cleanup out of not operational Claudio Imbrenda
2026-08-03 16:39   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 09/23] s390/vfio_ccw: Selectively expand io_mutex Claudio Imbrenda
2026-08-03 16:54   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 10/23] s390/vfio_ccw: Implement a crw lock Claudio Imbrenda
2026-08-03 16:51   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 11/23] KVM: s390: Fix unlikely NULL gmap dereference Claudio Imbrenda
2026-08-03 16:43   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 12/23] KVM: s390: Do not free SCA if it was not allocated Claudio Imbrenda
2026-08-03 16:49   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 13/23] KVM: s390: Fix kvm_s390_vcpu_unsetup_cmma() Claudio Imbrenda
2026-08-03 16:54   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 14/23] KVM: s390: Fix overclearing ESCA in case of error Claudio Imbrenda
2026-08-03 17:03   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 15/23] KVM: s390: ucontrol: Fix sca_clear_ext_call() Claudio Imbrenda
2026-08-03 17:09   ` sashiko-bot [this message]
2026-08-03 16:09 ` [GIT PULL v1 16/23] KVM: s390: Fix leaking of PGM_ADDRESSING to userspace Claudio Imbrenda
2026-08-03 17:14   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 17/23] KVM: s390: Fix race in __do_essa() Claudio Imbrenda
2026-08-03 17:04   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 18/23] KVM: s390: cmma: Fix dirty tracking when removing memslot Claudio Imbrenda
2026-08-03 17:12   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 19/23] KVM: s390: ucontrol: Add missing locking around gmap_remove_child() Claudio Imbrenda
2026-08-03 17:19   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 20/23] KVM: s390: Free the mmu cache when kvm_arch_vcpu_create() fails Claudio Imbrenda
2026-08-03 17:13   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 21/23] KVM: s390: Return -EINTR if a signal is pending while faulting-in Claudio Imbrenda
2026-08-03 17:40   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 22/23] KVM: s390: Fix ordering when adding to SCA Claudio Imbrenda
2026-08-03 17:26   ` sashiko-bot
2026-08-03 16:09 ` [GIT PULL v1 23/23] KVM: s390: Fix cleanup in kvm_s390_pv_create_cpu() Claudio Imbrenda
2026-08-03 17:19   ` sashiko-bot
2026-08-06 13:48 ` [GIT PULL v1 00/23] KVM: s390: Misc KVM and vfio-ccw fixes Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260803170939.460F11F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.