1. 13 4月, 2017 2 次提交
  2. 25 11月, 2016 1 次提交
    • R
      KVM: x86: fix out-of-bounds accesses of rtc_eoi map · 81cdb259
      Radim Krčmář 提交于
      KVM was using arrays of size KVM_MAX_VCPUS with vcpu_id, but ID can be
      bigger that the maximal number of VCPUs, resulting in out-of-bounds
      access.
      
      Found by syzkaller:
      
        BUG: KASAN: slab-out-of-bounds in __apic_accept_irq+0xb33/0xb50 at addr [...]
        Write of size 1 by task a.out/27101
        CPU: 1 PID: 27101 Comm: a.out Not tainted 4.9.0-rc5+ #49
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
         [...]
        Call Trace:
         [...] __apic_accept_irq+0xb33/0xb50 arch/x86/kvm/lapic.c:905
         [...] kvm_apic_set_irq+0x10e/0x180 arch/x86/kvm/lapic.c:495
         [...] kvm_irq_delivery_to_apic+0x732/0xc10 arch/x86/kvm/irq_comm.c:86
         [...] ioapic_service+0x41d/0x760 arch/x86/kvm/ioapic.c:360
         [...] ioapic_set_irq+0x275/0x6c0 arch/x86/kvm/ioapic.c:222
         [...] kvm_ioapic_inject_all arch/x86/kvm/ioapic.c:235
         [...] kvm_set_ioapic+0x223/0x310 arch/x86/kvm/ioapic.c:670
         [...] kvm_vm_ioctl_set_irqchip arch/x86/kvm/x86.c:3668
         [...] kvm_arch_vm_ioctl+0x1a08/0x23c0 arch/x86/kvm/x86.c:3999
         [...] kvm_vm_ioctl+0x1fa/0x1a70 arch/x86/kvm/../../../virt/kvm/kvm_main.c:3099
      Reported-by: NDmitry Vyukov <dvyukov@google.com>
      Cc: stable@vger.kernel.org
      Fixes: af1bae54 ("KVM: x86: bump KVM_MAX_VCPU_ID to 1023")
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: NDavid Hildenbrand <david@redhat.com>
      Signed-off-by: NRadim Krčmář <rkrcmar@redhat.com>
      81cdb259
  3. 03 3月, 2016 2 次提交
  4. 26 11月, 2015 1 次提交
  5. 01 10月, 2015 4 次提交
    • S
      KVM: x86: Add EOI exit bitmap inference · b053b2ae
      Steve Rutherford 提交于
      In order to support a userspace IOAPIC interacting with an in kernel
      APIC, the EOI exit bitmaps need to be configurable.
      
      If the IOAPIC is in userspace (i.e. the irqchip has been split), the
      EOI exit bitmaps will be set whenever the GSI Routes are configured.
      In particular, for the low MSI routes are reservable for userspace
      IOAPICs. For these MSI routes, the EOI Exit bit corresponding to the
      destination vector of the route will be set for the destination VCPU.
      
      The intention is for the userspace IOAPICs to use the reservable MSI
      routes to inject interrupts into the guest.
      
      This is a slight abuse of the notion of an MSI Route, given that MSIs
      classically bypass the IOAPIC. It might be worthwhile to add an
      additional route type to improve clarity.
      
      Compile tested for Intel x86.
      Signed-off-by: NSteve Rutherford <srutherford@google.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      b053b2ae
    • S
      KVM: x86: Split the APIC from the rest of IRQCHIP. · 49df6397
      Steve Rutherford 提交于
      First patch in a series which enables the relocation of the
      PIC/IOAPIC to userspace.
      
      Adds capability KVM_CAP_SPLIT_IRQCHIP;
      
      KVM_CAP_SPLIT_IRQCHIP enables the construction of LAPICs without the
      rest of the irqchip.
      
      Compile tested for x86.
      Signed-off-by: NSteve Rutherford <srutherford@google.com>
      Suggested-by: NAndrew Honig <ahonig@google.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      49df6397
    • P
      KVM: x86: store IOAPIC-handled vectors in each VCPU · 3bb345f3
      Paolo Bonzini 提交于
      We can reuse the algorithm that computes the EOI exit bitmap to figure
      out which vectors are handled by the IOAPIC.  The only difference
      between the two is for edge-triggered interrupts other than IRQ8
      that have no notifiers active; however, the IOAPIC does not have to
      do anything special for these interrupts anyway.
      
      This again limits the interactions between the IOAPIC and the LAPIC,
      making it easier to move the former to userspace.
      
      Inspired by a patch from Steve Rutherford.
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      3bb345f3
    • P
      KVM: x86: set TMR when the interrupt is accepted · bdaffe1d
      Paolo Bonzini 提交于
      Do not compute TMR in advance.  Instead, set the TMR just before the interrupt
      is accepted into the IRR.  This limits the coupling between IOAPIC and LAPIC.
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      bdaffe1d
  6. 27 3月, 2015 1 次提交
  7. 24 3月, 2015 1 次提交
  8. 10 3月, 2015 1 次提交
  9. 30 1月, 2015 1 次提交
  10. 18 12月, 2014 1 次提交
  11. 22 11月, 2014 1 次提交
  12. 20 11月, 2014 1 次提交
  13. 03 11月, 2014 1 次提交
    • N
      KVM: x86: some apic broadcast modes does not work · 394457a9
      Nadav Amit 提交于
      KVM does not deliver x2APIC broadcast messages with physical mode.  Intel SDM
      (10.12.9 ICR Operation in x2APIC Mode) states: "A destination ID value of
      FFFF_FFFFH is used for broadcast of interrupts in both logical destination and
      physical destination modes."
      
      In addition, the local-apic enables cluster mode broadcast. As Intel SDM
      10.6.2.2 says: "Broadcast to all local APICs is achieved by setting all
      destination bits to one." This patch enables cluster mode broadcast.
      
      The fix tries to combine broadcast in different modes through a unified code.
      
      One rare case occurs when the source of IPI has its APIC disabled.  In such
      case, the source can still issue IPIs, but since the source is not obliged to
      have the same LAPIC mode as the enabled ones, we cannot rely on it.
      Since it is a rare case, it is unoptimized and done on the slow-path.
      Signed-off-by: NNadav Amit <namit@cs.technion.ac.il>
      Reviewed-by: NRadim Krčmář <rkrcmar@redhat.com>
      Reviewed-by: NWanpeng Li <wanpeng.li@linux.intel.com>
      [As per Radim's review, use unsigned int for X2APIC_BROADCAST, return bool from
       kvm_apic_broadcast. - Paolo]
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      394457a9
  14. 16 9月, 2014 1 次提交
    • Z
      kvm: ioapic: conditionally delay irq delivery duringeoi broadcast · 184564ef
      Zhang Haoyu 提交于
      Currently, we call ioapic_service() immediately when we find the irq is still
      active during eoi broadcast. But for real hardware, there's some delay between
      the EOI writing and irq delivery.  If we do not emulate this behavior, and
      re-inject the interrupt immediately after the guest sends an EOI and re-enables
      interrupts, a guest might spend all its time in the ISR if it has a broken
      handler for a level-triggered interrupt.
      
      Such livelock actually happens with Windows guests when resuming from
      hibernation.
      
      As there's no way to recognize the broken handle from new raised ones, this patch
      delays an interrupt if 10.000 consecutive EOIs found that the interrupt was
      still high.  The guest can then make a little forward progress, until a proper
      IRQ handler is set or until some detection routine in the guest (such as
      Linux's note_interrupt()) recognizes the situation.
      
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      Signed-off-by: NZhang Haoyu <zhanghy@sangfor.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      184564ef
  15. 09 1月, 2014 1 次提交
  16. 17 4月, 2013 2 次提交
  17. 16 4月, 2013 5 次提交
  18. 29 1月, 2013 1 次提交
  19. 21 7月, 2012 1 次提交
  20. 17 4月, 2012 1 次提交
    • M
      KVM: dont clear TMR on EOI · a0c9a822
      Michael S. Tsirkin 提交于
      Intel spec says that TMR needs to be set/cleared
      when IRR is set, but kvm also clears it on  EOI.
      
      I did some tests on a real (AMD based) system,
      and I see same TMR values both before
      and after EOI, so I think it's a minor bug in kvm.
      
      This patch fixes TMR to be set/cleared on IRR set
      only as per spec.
      
      And now that we don't clear TMR, we can save
      an atomic read of TMR on EOI that's not propagated
      to ioapic, by checking whether ioapic needs
      a specific vector first and calculating
      the mode afterwards.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMarcelo Tosatti <mtosatti@redhat.com>
      a0c9a822
  21. 13 5月, 2010 1 次提交
  22. 01 3月, 2010 2 次提交
  23. 03 12月, 2009 2 次提交
  24. 10 6月, 2009 5 次提交