linux/virt/kvm/arm
Christoffer Dall 2cccbb368a KVM: arm64: vgic-its: Plug race in vgic_put_irq
Right now the following sequence of events can happen:

  1. Thread X calls vgic_put_irq
  2. Thread Y calls vgic_add_lpi
  3. Thread Y gets lpi_list_lock
  4. Thread X drops the ref count to 0 and blocks on lpi_list_lock
  5. Thread Y finds the irq via the lpi_list_lock, raises the ref
     count to 1, and release the lpi_list_lock.
  6. Thread X proceeds and frees the irq.

Avoid this by holding the spinlock around the kref_put.

Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
History 2016-08-10 11:41:54 +02:00
..
hyp KVM: arm/arm64: The GIC is dead, long live the GIC 2016-07-03 23:09:37 +02:00
vgic KVM: arm64: vgic-its: Plug race in vgic_put_irq 2016-08-10 11:41:54 +02:00
arch_timer.c arm/kvm/arch_timer: Convert to hotplug state machine 2016-07-15 10:40:27 +02:00
pmu.c KVM: arm/arm64: pmu: abstract access to number of SPIs 2016-05-20 15:39:43 +02:00
trace.h arm/arm64: KVM: Add tracepoints for vgic and timer 2015-10-22 23:01:48 +02:00