• Vitaly Kuznetsov's avatar
    KVM: x86: hyper-v: Fix 'using uninitialized value' Coverity warning · 8b9e13d2
    Vitaly Kuznetsov authored
    In kvm_hv_flush_tlb(), 'data_offset' and 'consumed_xmm_halves' variables
    are used in a mutually exclusive way: in 'hc->fast' we count in 'XMM
    halves' and increase 'data_offset' otherwise. Coverity discovered, that in
    one case both variables are incremented unconditionally. This doesn't seem
    to cause any issues as the only user of 'data_offset'/'consumed_xmm_halves'
    data is kvm_hv_get_tlb_flush_entries() -> kvm_hv_get_hc_data() which also
    takes into account 'hc->fast' but is still worth fixing.
    
    To make things explicit, put 'data_offset' and 'consumed_xmm_halves' to
    'struct kvm_hv_hcall' as a union and use at call sites. This allows to
    remove explicit 'data_offset'/'consumed_xmm_halves' parameters from
    kvm_hv_get_hc_data()/kvm_get_sparse_vp_set()/kvm_hv_get_tlb_flush_entries()
    helpers.
    
    Note: 'struct kvm_hv_hcall' is allocated on stack in kvm_hv_hypercall() and
    is not zeroed, consumers are supposed to initialize the appropriate field
    if needed.
    Reported-by: default avatarcoverity-bot <keescook+coverity-bot@chromium.org>
    Addresses-Coverity-ID: 1527764 ("Uninitialized variables")
    Fixes: 26097086 ("KVM: x86: hyper-v: Handle HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST{,EX} calls gently")
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20221208102700.959630-1-vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    8b9e13d2
hyperv.c 74.3 KB