When an MSI descriptor was not available, the error path would try to unbind an irq that was never acquired - potentially unbinding an unrelated irq.
Fixes: 4892c9b4ada9f9 ("xen: add support for MSI message groups") Reported-by: Hooman Mirhadi mirhadih@amazon.com CC: stable@vger.kernel.org CC: Roger Pau Monné roger.pau@citrix.com CC: Boris Ostrovsky boris.ostrovsky@oracle.com CC: Eduardo Valentin eduval@amazon.com CC: Juergen Gross jgross@suse.com CC: Thomas Gleixner tglx@linutronix.de CC: "K. Y. Srinivasan" kys@microsoft.com CC: Liu Shuo shuo.a.liu@intel.com CC: Anoob Soman anoob.soman@citrix.com Signed-off-by: Amit Shah aams@amazon.com --- drivers/xen/events/events_base.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index 1ab4bd1..c86d10e 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -755,8 +755,10 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, mutex_unlock(&irq_mapping_update_lock); return irq; error_irq: - for (; i >= 0; i--) + while (i > 0) { + i--; __unbind_from_irq(irq + i); + } mutex_unlock(&irq_mapping_update_lock); return ret; }
On Tue, Feb 27, 2018 at 03:55:57PM +0000, Amit Shah wrote:
When an MSI descriptor was not available, the error path would try to unbind an irq that was never acquired - potentially unbinding an unrelated irq.
Those IRQs have been allocated in the xen_allocate_irqs_dynamic call, so I think the "potentially unbinding an unrelated irq" part is wrong. The unbind call would be performed against an unbound IRQ, which is harmless AFAICT.
Fixes: 4892c9b4ada9f9 ("xen: add support for MSI message groups") Reported-by: Hooman Mirhadi mirhadih@amazon.com CC: stable@vger.kernel.org CC: Roger Pau Monné roger.pau@citrix.com CC: Boris Ostrovsky boris.ostrovsky@oracle.com CC: Eduardo Valentin eduval@amazon.com CC: Juergen Gross jgross@suse.com CC: Thomas Gleixner tglx@linutronix.de CC: "K. Y. Srinivasan" kys@microsoft.com CC: Liu Shuo shuo.a.liu@intel.com CC: Anoob Soman anoob.soman@citrix.com Signed-off-by: Amit Shah aams@amazon.com
drivers/xen/events/events_base.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index 1ab4bd1..c86d10e 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -755,8 +755,10 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, mutex_unlock(&irq_mapping_update_lock); return irq; error_irq:
- for (; i >= 0; i--)
- while (i > 0) {
while (i--) __unbind_from_irq(irq + i);
Although please see reply to patch 2.
Roger.
linux-stable-mirror@lists.linaro.org