APPLIED: [SRU][F][PATCH 0/1] KVM: PV: ext call delivered twice when receiver in PSW wait (LP: 1995941)

Stefan Bader stefan.bader at canonical.com
Fri Nov 11 11:54:16 UTC 2022


On 10.11.22 21:06, frank.heimes at canonical.com wrote:
> BugLink: https://bugs.launchpad.net/bugs/1995941
> 
> SRU Justification:
> 
> [Impact]
> 
>   * In a secure execution guest, the external interrupt for the SIGP
>     external call order is delivered twice to a VCPU even though it was
>     only sent once.
> 
>   * Under PV (protected virtualization), external call interrupts are
>     delivered by the SIGP interpretation facility, without KVM's
>     involvement.
>     But, if the receiving CPU is in enabled wait, KVM needs to wake the
>     receiving CPU such that the interrupt can be delivered.
>     Hence, in this case, the SIGP external call order causes
>     an interception.
> 
>   * In response, KVM only needs to wake the receiving VCPU.
>     Interrupt delivery is then handled by the SIGP interpretation facility.
> 
>   * KVM wrongly assumed it also needs to request injection for the
>     external call interrupt after the respective intercept, causing the
>     interrupt to be delivered twice:
>     * once through the SIGP interpretation facility
>     * and once through the interrupt injection control by KVM.
> 
>   * Solution is to add appropriate special handling for 108 external
>     call intercepts.
> 
> [Fix]
> 
>   * c3f0e5fd2d33 c3f0e5fd2d33d80c5a5a8b5e5d2bab2841709cc8
>     "KVM: s390: pv: don't present the ecall interrupt twice"
> 
> [Test Case]
> 
>   * Have an Secure Execution (PV) environment setup on an
>     IBM z15 or LinuxONE III LPAR using Ubuntu Server 20.04 (latest).
> 
>   * Apply kvm-unit-test submitted upstream:
>     "[kvm-unit-tests PATCH v1 0/4] s390x: add tests for SIGP call \
>      orders in enabled wait"
> 
>   * Run the smp_PV kvm-unit-test: ./run_tests.sh smp_PV
> 
>   * Check logs/smp_PV.log.
>     If system is affected, the following line can be found:
>     "ABORT: smp: psw wait: ecall: Unexpected external call interrupt \
>      (code 0x1202): on cpu 1 at 0x11958"
> 
>   * If the system is not affected, the line should look like this:
>     "PASS: smp: psw wait: ecall: received"
> 
> [Regression Potential / What can go wrong]
> 
>   * The handle_pv_notification can be wrong and misleading
>     in case 'ret' is not handled correctly.
> 
>   * trace_kvm_s390_handle_sigp_pei might not be called correctly,
>     now after the if condition.
> 
>   * In worst case the external interrupt could not be delivered
>     at all or still too often.
> 
> [Other]
> 
>   * The fix/patch c3f0e5fd2d33 got upstream accepted with kernel v6.0,
>     so it not only needs to be applied to 20.04/5.4, but also to 22.04/5.15
>     and 22.10/5.19.
> 
>   * But the patch got properly tagged for upstream stable:
>     Cc: <stable at vger.kernel.org> # 5.7
>     Fixes: da24a0cc58ed ("KVM: s390: protvirt: Instruction emulation")
> 
>   * And with that it got already picked up and is included in:
>     22.04 with Ubuntu-5.15.0-53.59 (currently in jammy-proposed)
>     22.10 with Ubuntu-5.19.0-16.16 means incl. in the release kernel.
> 
>   * So the only Ubuntu release that is affected is 20.04/focal.
> 
> Nico Boehr (1):
>    KVM: s390: pv: don't present the ecall interrupt twice
> 
>   arch/s390/kvm/intercept.c | 15 +++++++++++++++
>   arch/s390/kvm/sigp.c      |  4 ++--
>   2 files changed, 17 insertions(+), 2 deletions(-)
> 

Applied to focal:linux/master-next. Thanks.

-Stefan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20221111/77d9a1d0/attachment.sig>


More information about the kernel-team mailing list