KVM: arm64: vgic-its: Fix memory leak on the error path of vgic_add_lpi()

If we're going to fail out the vgic_add_lpi(), let's make sure the
allocated vgic_irq memory is also freed. Though it seems that both
cases are unlikely to fail.

Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200414030349.625-3-yuzenghui@huawei.com
This commit is contained in:
Zenghui Yu 2020-04-14 11:03:48 +08:00 committed by Marc Zyngier
parent 969ce8b526
commit 57bdb436ce

View File

@ -96,14 +96,21 @@ static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid,
* We "cache" the configuration table entries in our struct vgic_irq's. * We "cache" the configuration table entries in our struct vgic_irq's.
* However we only have those structs for mapped IRQs, so we read in * However we only have those structs for mapped IRQs, so we read in
* the respective config data from memory here upon mapping the LPI. * the respective config data from memory here upon mapping the LPI.
*
* Should any of these fail, behave as if we couldn't create the LPI
* by dropping the refcount and returning the error.
*/ */
ret = update_lpi_config(kvm, irq, NULL, false); ret = update_lpi_config(kvm, irq, NULL, false);
if (ret) if (ret) {
vgic_put_irq(kvm, irq);
return ERR_PTR(ret); return ERR_PTR(ret);
}
ret = vgic_v3_lpi_sync_pending_status(kvm, irq); ret = vgic_v3_lpi_sync_pending_status(kvm, irq);
if (ret) if (ret) {
vgic_put_irq(kvm, irq);
return ERR_PTR(ret); return ERR_PTR(ret);
}
return irq; return irq;
} }