lkml.org 
[lkml]   [2019]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 225/243] KVM: arm/arm64: vgic: Dont rely on the wrong pending table
    Date
    From: Zenghui Yu <yuzenghui@huawei.com>

    commit ca185b260951d3b55108c0b95e188682d8a507b7 upstream.

    It's possible that two LPIs locate in the same "byte_offset" but target
    two different vcpus, where their pending status are indicated by two
    different pending tables. In such a scenario, using last_byte_offset
    optimization will lead KVM relying on the wrong pending table entry.
    Let us use last_ptr instead, which can be treated as a byte index into
    a pending table and also, can be vcpu specific.

    Fixes: 280771252c1b ("KVM: arm64: vgic-v3: KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Acked-by: Eric Auger <eric.auger@redhat.com>
    Link: https://lore.kernel.org/r/20191029071919.177-4-yuzenghui@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    virt/kvm/arm/vgic/vgic-v3.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/virt/kvm/arm/vgic/vgic-v3.c
    +++ b/virt/kvm/arm/vgic/vgic-v3.c
    @@ -375,8 +375,8 @@ retry:
    int vgic_v3_save_pending_tables(struct kvm *kvm)
    {
    struct vgic_dist *dist = &kvm->arch.vgic;
    - int last_byte_offset = -1;
    struct vgic_irq *irq;
    + gpa_t last_ptr = ~(gpa_t)0;
    int ret;
    u8 val;

    @@ -396,11 +396,11 @@ int vgic_v3_save_pending_tables(struct k
    bit_nr = irq->intid % BITS_PER_BYTE;
    ptr = pendbase + byte_offset;

    - if (byte_offset != last_byte_offset) {
    + if (ptr != last_ptr) {
    ret = kvm_read_guest_lock(kvm, ptr, &val, 1);
    if (ret)
    return ret;
    - last_byte_offset = byte_offset;
    + last_ptr = ptr;
    }

    stored = val & (1U << bit_nr);

    \
     
     \ /
      Last update: 2019-12-11 16:25    [W:8.689 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site