Re: [PATCH v2 2/7] KVM: s390: Return -EFAULT instead of PGM_ADDRESSING

From: Steffen Eiden

Date: Tue Jul 14 2026 - 04:46:10 EST


On Mon, Jul 13, 2026 at 05:08:52PM +0200, Claudio Imbrenda wrote:
> If kvm_s390_set_cmma_bits() is asked to set CMMA values outside of a
> memslot, PGM_ADDRESSING (5) is returned, instead of a negative error
> value. Same issue with kvm_s390_{g,s}et_skeys().
>
> Fix by returning -EFAULT whenever the return value would be > 0, which
> is consistent with the behaviour before the gmap rewrite.
>
> Fixes: e38c884df921 ("KVM: s390: Switch to new gmap")
> Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>
> ---
> arch/s390/kvm/kvm-s390.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
> index 374dae6dae81..53691aaf6534 100644
> --- a/arch/s390/kvm/kvm-s390.c
> +++ b/arch/s390/kvm/kvm-s390.c
> @@ -2212,7 +2212,7 @@ static int kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
> }
>
> kvfree(keys);
> - return r;
> + return r <= 0 ? r : -EFAULT;
> }
>
> static int kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
> @@ -2274,7 +2274,7 @@ static int kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
> kvm_s390_free_mmu_cache(mc);
> out:
> kvfree(keys);
> - return r;
> + return r <= 0 ? r : -EFAULT;
> }
>
> /*
> @@ -2384,7 +2384,7 @@ static int kvm_s390_set_cmma_bits(struct kvm *kvm,
>
> set_bit(GMAP_FLAG_USES_CMM, &kvm->arch.gmap->flags);
>
> - return r;
> + return r <= 0 ? r : -EFAULT;
> }

Wouldnt it make more sense to let dat_set_cmma_bits return -EFAULT?
(there the PGM_ADDRESSING might come from)

at least change the documentation of this function that it might return
PGM_ADDRESSING in case of an error.

Similary, dat_{g,s}et_storage_keys may return -EFAULT or at least have
this behaviour documented.


Steffen