irqdomain/treewide: Keep firmware node unconditionally allocated
authorThomas Gleixner <tglx@linutronix.de>
Thu, 9 Jul 2020 09:53:06 +0000 (11:53 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Jul 2020 08:19:37 +0000 (10:19 +0200)
commitb4198ecddb87cd955aa9e024dd656af5ceaf6196
tree32b5d835781358c385223ff18f2e8c38decbce7a
parent5dd398947f49a16b6e8ac9efaae57fd55604be08
irqdomain/treewide: Keep firmware node unconditionally allocated

[ Upstream commit e3beca48a45b5e0e6e6a4e0124276b8248dcc9bb ]

Quite some non OF/ACPI users of irqdomains allocate firmware nodes of type
IRQCHIP_FWNODE_NAMED or IRQCHIP_FWNODE_NAMED_ID and free them right after
creating the irqdomain. The only purpose of these FW nodes is to convey
name information. When this was introduced the core code did not store the
pointer to the node in the irqdomain. A recent change stored the firmware
node pointer in irqdomain for other reasons and missed to notice that the
usage sites which do the alloc_fwnode/create_domain/free_fwnode sequence
are broken by this. Storing a dangling pointer is dangerous itself, but in
case that the domain is destroyed later on this leads to a double free.

Remove the freeing of the firmware node after creating the irqdomain from
all affected call sites to cure this.

Fixes: 711419e504eb ("irqdomain: Add the missing assignment of domain->fwnode for named fwnode")
Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/873661qakd.fsf@nanos.tec.linutronix.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/mips/pci/pci-xtalk-bridge.c
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/apic/msi.c
arch/x86/kernel/apic/vector.c
arch/x86/platform/uv/uv_irq.c
drivers/iommu/amd_iommu.c
drivers/iommu/hyperv-iommu.c
drivers/iommu/intel_irq_remapping.c
drivers/mfd/ioc3.c
drivers/pci/controller/vmd.c