On Tue, Dec 12, 2017 at 5:42 PM, Christoffer Dall <christoffer.dall@xxxxxxxxxx> wrote: > From: Marc Zyngier <marc.zyngier@xxxxxxx> > > Commit 64afe6e9eb4841f35317da4393de21a047a883b3 upstream. Please disregard this, I accidentally backported the arm64 patch instead of the arm patch. Another one (the correct one, hopefully) incoming. > > The current pending table parsing code assumes that we keep the > previous read of the pending bits, but keep that variable in > the current block, making sure it is discarded on each loop. > > We end-up using whatever is on the stack. Who knows, it might > just be the right thing... > > Fixes: 33d3bc9556a7d ("KVM: arm64: vgic-its: Read initial LPI pending table") > Cc: <stable@xxxxxxxxxxxxxxx> # 4.8 > Reported-by: AKASHI Takahiro <takahiro.akashi@xxxxxxxxxx> > Reviewed-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> > Signed-off-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > --- > virt/kvm/arm/vgic/vgic-its.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c > index 4660a7d04eea..bbd4a988e8c1 100644 > --- a/virt/kvm/arm/vgic/vgic-its.c > +++ b/virt/kvm/arm/vgic/vgic-its.c > @@ -322,6 +322,7 @@ static int its_sync_lpi_pending_table(struct kvm_vcpu *vcpu) > int ret = 0; > u32 *intids; > int nr_irqs, i; > + u8 pendmask; > > nr_irqs = vgic_copy_lpi_list(vcpu->kvm, &intids); > if (nr_irqs < 0) > @@ -329,7 +330,6 @@ static int its_sync_lpi_pending_table(struct kvm_vcpu *vcpu) > > for (i = 0; i < nr_irqs; i++) { > int byte_offset, bit_nr; > - u8 pendmask; > > byte_offset = intids[i] / BITS_PER_BYTE; > bit_nr = intids[i] % BITS_PER_BYTE; > -- > 2.14.2 >