You need to sign in or sign up before continuing.
  • Sean Christopherson's avatar
    KVM: x86: Don't bother reading sparse banks that end up being ignored · 79661c37
    Sean Christopherson authored
    
    
    When handling "sparse" VP_SET requests, don't read sparse banks that
    can't possibly contain a legal VP index instead of ignoring such banks
    later on in sparse_set_to_vcpu_mask().  This allows KVM to cap the size
    of its sparse_banks arrays for VP_SET at KVM_HV_MAX_SPARSE_VCPU_SET_BITS.
    Add a compile time assert that KVM_HV_MAX_SPARSE_VCPU_SET_BITS<=64, i.e.
    that KVM_MAX_VCPUS<=4096, as the TLFS allows for at most 64 sparse banks,
    and KVM will need to do _something_ to play nice with Hyper-V.
    
    Reducing the size of sparse_banks fudges around a compilation warning
    (that becomes error with KVM_WERROR=y) when CONFIG_KASAN_STACK=y, which
    is selected (and can't be unselected) by CONFIG_KASAN=y when using gcc
    (clang/LLVM is a stack hog in some cases so it's opt-in for clang).
    KASAN_STACK adds a redzone around every stack variable, which pushes the
    Hyper-V functions over the default limit of 1024.
    
    Ideally, KVM would flat out reject such impossibilities, but the TLFS
    explicitly allows providing empty banks, even if a bank can't possibly
    contain a valid VP index due to its position exceeding KVM's max.
    
      Furthermore, for a bit 1 in ValidBankMask, it is valid state for the
      corresponding element in BanksContents can be all 0s, meaning no
      processors are specified in this bank.
    
    Arguably KVM should reject and not ignore the "extra" banks, but that can
    be done independently and without bloating sparse_banks, e.g. by reading
    each "extra" 8-byte chunk individually.
    Reported-by: default avatarAjay Garg <ajaygargnsit@gmail.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Reviewed-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Message-Id: <20211207220926.718794-6-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    79661c37
hyperv.c 66.9 KB