lkml.org 
[lkml]   [2015]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.19.y-ckt 060/128] KVM: s390: fix wrong lookup of VCPUs by array index
    Date
    3.19.8-ckt12 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: David Hildenbrand <dahi@linux.vnet.ibm.com>

    commit 152e9f65d66f0a3891efc3869440becc0e7ff53f upstream.

    For now, VCPUs were always created sequentially with incrementing
    VCPU ids. Therefore, the index in the VCPUs array matched the id.

    As sequential creation might change with cpu hotplug, let's use
    the correct lookup function to find a VCPU by id, not array index.

    Let's also use kvm_lookup_vcpu() for validation of the sending VCPU
    on external call injection.

    Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
    [ kamal: backport to 3.19-stable: dropped __inject_extcall validation change ]
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    arch/s390/kvm/sigp.c | 8 ++------
    1 file changed, 2 insertions(+), 6 deletions(-)

    diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c
    index 6651f9f..7ca07cb 100644
    --- a/arch/s390/kvm/sigp.c
    +++ b/arch/s390/kvm/sigp.c
    @@ -317,12 +317,8 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code,
    u16 cpu_addr, u32 parameter, u64 *status_reg)
    {
    int rc;
    - struct kvm_vcpu *dst_vcpu;
    + struct kvm_vcpu *dst_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);

    - if (cpu_addr >= KVM_MAX_VCPUS)
    - return SIGP_CC_NOT_OPERATIONAL;
    -
    - dst_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
    if (!dst_vcpu)
    return SIGP_CC_NOT_OPERATIONAL;

    @@ -452,7 +448,7 @@ int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu)
    trace_kvm_s390_handle_sigp_pei(vcpu, order_code, cpu_addr);

    if (order_code == SIGP_EXTERNAL_CALL) {
    - dest_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
    + dest_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
    BUG_ON(dest_vcpu == NULL);

    kvm_s390_vcpu_wakeup(dest_vcpu);
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-12-16 19:41    [W:4.329 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site