summaryrefslogtreecommitdiff
path: root/kernel/irq
diff options
context:
space:
mode:
authorMarc Zyngier <maz@kernel.org>2022-12-16 11:03:02 +0000
committerMarc Zyngier <maz@kernel.org>2022-12-16 13:27:18 +0000
commitdb3568fd80a3999413c04ea0cf52596b7b0ad9aa (patch)
tree010a886cf91641f2031d3e01c389877b7aff3765 /kernel/irq
parent84e57d292203a45c96dbcb2e6be9dd80961d981a (diff)
genirq/msi: Check for the presence of an irq domain when validating msi_ctrl
For architectures such as s390 and powerpc that do not use irq domains for MSIs, dev->msi.domain is always NULL, so the per-device, per-bus MSI domain is also guaranteed to be NULL. So checking one without checking the other is bound to result in a splat, followed by a memory leak as we don't free the MSI descriptors. Add the missing check. Reported-by: Matthew Rosato <mjrosato@linux.ibm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/e570e70d-19bc-101b-0481-ff9a3cab3504@linux.ibm.com
Diffstat (limited to 'kernel/irq')
-rw-r--r--kernel/irq/msi.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index bd4d4dd626b4..e843604c3a4f 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -165,7 +165,8 @@ static bool msi_ctrl_valid(struct device *dev, struct msi_ctrl *ctrl)
unsigned int hwsize;
if (WARN_ON_ONCE(ctrl->domid >= MSI_MAX_DEVICE_IRQDOMAINS ||
- !dev->msi.data->__domains[ctrl->domid].domain))
+ (dev->msi.domain &&
+ !dev->msi.data->__domains[ctrl->domid].domain)))
return false;
hwsize = msi_domain_get_hwsize(dev, ctrl->domid);