lkml.org 
[lkml]   [2020]   [Jul]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 123/166] KVM: arm64: Fix kvm_reset_vcpu() return code being incorrect with SVE
    Date
    From: Steven Price <steven.price@arm.com>

    If SVE is enabled then 'ret' can be assigned the return value of
    kvm_vcpu_enable_sve() which may be 0 causing future "goto out" sites to
    erroneously return 0 on failure rather than -EINVAL as expected.

    Remove the initialisation of 'ret' and make setting the return value
    explicit to avoid this situation in the future.

    Fixes: 9a3cdf26e336 ("KVM: arm64/sve: Allow userspace to enable SVE for vcpus")
    Cc: stable@vger.kernel.org
    Reported-by: James Morse <james.morse@arm.com>
    Signed-off-by: Steven Price <steven.price@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20200617105456.28245-1-steven.price@arm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm64/kvm/reset.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/arch/arm64/kvm/reset.c
    +++ b/arch/arm64/kvm/reset.c
    @@ -258,7 +258,7 @@ static int kvm_vcpu_enable_ptrauth(struc
    int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
    {
    const struct kvm_regs *cpu_reset;
    - int ret = -EINVAL;
    + int ret;
    bool loaded;

    /* Reset PMU outside of the non-preemptible section */
    @@ -281,15 +281,19 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu

    if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) ||
    test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) {
    - if (kvm_vcpu_enable_ptrauth(vcpu))
    + if (kvm_vcpu_enable_ptrauth(vcpu)) {
    + ret = -EINVAL;
    goto out;
    + }
    }

    switch (vcpu->arch.target) {
    default:
    if (test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features)) {
    - if (!cpu_has_32bit_el1())
    + if (!cpu_has_32bit_el1()) {
    + ret = -EINVAL;
    goto out;
    + }
    cpu_reset = &default_regs_reset32;
    } else {
    cpu_reset = &default_regs_reset;

    \
     
     \ /
      Last update: 2020-07-14 20:59    [W:4.537 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site