* [PATCH v1] genirq/msi: fix crash when handling Multi-MSI
@ 2022-01-17 9:27 Tong Zhang
2022-01-17 9:59 ` Marc Zyngier
0 siblings, 1 reply; 10+ messages in thread
From: Tong Zhang @ 2022-01-17 9:27 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner, Jason Gunthorpe, linux-kernel; +Cc: Tong Zhang
pci_msi_domain_check_cap() could return 1 when domain does not support
multi MSI and user request multi MSI. This positive value will be used by
__pci_enable_msi_range(). In previous refactor, this positive value is
handled as error case which will cause kernel crash.
[ 1.197953] BUG: KASAN: use-after-free in __pci_enable_msi_range+0x234/0x320
[ 1.198327] Freed by task 1:
[ 1.198327] kfree+0x8f/0x2b0
[ 1.198327] msi_free_msi_descs_range+0xf5/0x130
[ 1.198327] msi_domain_alloc_irqs_descs_locked+0x8d/0xa0
[ 1.198327] __pci_enable_msi_range+0x1a4/0x320
[ 1.198327] pci_alloc_irq_vectors_affinity+0x135/0x1a0
[ 1.198327] pcie_port_device_register+0x4a1/0x5c0
[ 1.198327] pcie_portdrv_probe+0x50/0x100
Fixes: 0f62d941acf9 ("genirq/msi: Provide msi_domain_alloc/free_irqs_descs_locked()")
Signed-off-by: Tong Zhang <ztong0001@gmail.com>
---
kernel/irq/msi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 2bdfce5edafd..57b1447a3bf1 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -935,7 +935,7 @@ int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device
return ret;
ret = ops->domain_alloc_irqs(domain, dev, nvec);
- if (ret)
+ if (ret < 0)
msi_domain_free_irqs_descs_locked(domain, dev);
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v1] genirq/msi: fix crash when handling Multi-MSI
2022-01-17 9:27 [PATCH v1] genirq/msi: fix crash when handling Multi-MSI Tong Zhang
@ 2022-01-17 9:59 ` Marc Zyngier
2022-01-17 10:10 ` Tong Zhang
0 siblings, 1 reply; 10+ messages in thread
From: Marc Zyngier @ 2022-01-17 9:59 UTC (permalink / raw)
To: Tong Zhang; +Cc: Thomas Gleixner, Jason Gunthorpe, linux-kernel
On Mon, 17 Jan 2022 09:27:59 +0000,
Tong Zhang <ztong0001@gmail.com> wrote:
>
> pci_msi_domain_check_cap() could return 1 when domain does not support
> multi MSI and user request multi MSI. This positive value will be used by
> __pci_enable_msi_range(). In previous refactor, this positive value is
> handled as error case which will cause kernel crash.
>
> [ 1.197953] BUG: KASAN: use-after-free in __pci_enable_msi_range+0x234/0x320
> [ 1.198327] Freed by task 1:
> [ 1.198327] kfree+0x8f/0x2b0
> [ 1.198327] msi_free_msi_descs_range+0xf5/0x130
> [ 1.198327] msi_domain_alloc_irqs_descs_locked+0x8d/0xa0
> [ 1.198327] __pci_enable_msi_range+0x1a4/0x320
> [ 1.198327] pci_alloc_irq_vectors_affinity+0x135/0x1a0
> [ 1.198327] pcie_port_device_register+0x4a1/0x5c0
> [ 1.198327] pcie_portdrv_probe+0x50/0x100
I'm sorry, but you'll have to be a bit clearer in your commit message,
because I cannot relate what you describe with the patch.
The real issue seems to be that a domain_alloc_irqs callback can
return a positive, non-zero value, and I don't think this is expected.
How about this instead? If I am barking up the wrong tree, please
provide a more accurate description of the problem you are seeing.
Thanks,
M.
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 2bdfce5edafd..da8bb6135627 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -878,8 +878,10 @@ int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
virq = __irq_domain_alloc_irqs(domain, -1, desc->nvec_used,
dev_to_node(dev), &arg, false,
desc->affinity);
- if (virq < 0)
- return msi_handle_pci_fail(domain, desc, allocated);
+ if (virq < 0) {
+ ret = msi_handle_pci_fail(domain, desc, allocated);
+ return ret < 0 ? ret : 0;
+ }
for (i = 0; i < desc->nvec_used; i++) {
irq_set_msi_desc_off(virq, i, desc);
--
Without deviation from the norm, progress is not possible.
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v1] genirq/msi: fix crash when handling Multi-MSI
2022-01-17 9:59 ` Marc Zyngier
@ 2022-01-17 10:10 ` Tong Zhang
2022-01-17 11:36 ` Marc Zyngier
0 siblings, 1 reply; 10+ messages in thread
From: Tong Zhang @ 2022-01-17 10:10 UTC (permalink / raw)
To: Marc Zyngier; +Cc: Thomas Gleixner, Jason Gunthorpe, open list
Hello,
ops->msi_check could point to pci_msi_domain_check_cap that is the
function in question
hence we can have following call stack
pci_msi_domain_check_cap (used by ops->msi_check(domain, info, dev))
msi_domain_prepare_irqs
__msi_domain_alloc_irqs
msi_domain_alloc_irqs_descs_locked
What I am suggesting is commit 0f62d941acf9 changed how this return
value is being handled and created a UAF
- Tong
On Mon, Jan 17, 2022 at 2:00 AM Marc Zyngier <maz@kernel.org> wrote:
>
> On Mon, 17 Jan 2022 09:27:59 +0000,
> Tong Zhang <ztong0001@gmail.com> wrote:
> >
> > pci_msi_domain_check_cap() could return 1 when domain does not support
> > multi MSI and user request multi MSI. This positive value will be used by
> > __pci_enable_msi_range(). In previous refactor, this positive value is
> > handled as error case which will cause kernel crash.
> >
> > [ 1.197953] BUG: KASAN: use-after-free in __pci_enable_msi_range+0x234/0x320
> > [ 1.198327] Freed by task 1:
> > [ 1.198327] kfree+0x8f/0x2b0
> > [ 1.198327] msi_free_msi_descs_range+0xf5/0x130
> > [ 1.198327] msi_domain_alloc_irqs_descs_locked+0x8d/0xa0
> > [ 1.198327] __pci_enable_msi_range+0x1a4/0x320
> > [ 1.198327] pci_alloc_irq_vectors_affinity+0x135/0x1a0
> > [ 1.198327] pcie_port_device_register+0x4a1/0x5c0
> > [ 1.198327] pcie_portdrv_probe+0x50/0x100
>
> I'm sorry, but you'll have to be a bit clearer in your commit message,
> because I cannot relate what you describe with the patch.
>
> The real issue seems to be that a domain_alloc_irqs callback can
> return a positive, non-zero value, and I don't think this is expected.
>
> How about this instead? If I am barking up the wrong tree, please
> provide a more accurate description of the problem you are seeing.
>
> Thanks,
>
> M.
>
> diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
> index 2bdfce5edafd..da8bb6135627 100644
> --- a/kernel/irq/msi.c
> +++ b/kernel/irq/msi.c
> @@ -878,8 +878,10 @@ int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
> virq = __irq_domain_alloc_irqs(domain, -1, desc->nvec_used,
> dev_to_node(dev), &arg, false,
> desc->affinity);
> - if (virq < 0)
> - return msi_handle_pci_fail(domain, desc, allocated);
> + if (virq < 0) {
> + ret = msi_handle_pci_fail(domain, desc, allocated);
> + return ret < 0 ? ret : 0;
> + }
>
> for (i = 0; i < desc->nvec_used; i++) {
> irq_set_msi_desc_off(virq, i, desc);
>
> --
> Without deviation from the norm, progress is not possible.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] genirq/msi: fix crash when handling Multi-MSI
2022-01-17 10:10 ` Tong Zhang
@ 2022-01-17 11:36 ` Marc Zyngier
2022-01-18 14:39 ` Thomas Gleixner
0 siblings, 1 reply; 10+ messages in thread
From: Marc Zyngier @ 2022-01-17 11:36 UTC (permalink / raw)
To: Tong Zhang; +Cc: Thomas Gleixner, Jason Gunthorpe, open list
Please avoid top-posting.
On Mon, 17 Jan 2022 10:10:13 +0000,
Tong Zhang <ztong0001@gmail.com> wrote:
>
> Hello,
>
> ops->msi_check could point to pci_msi_domain_check_cap that is the
> function in question
>
> hence we can have following call stack
>
> pci_msi_domain_check_cap (used by ops->msi_check(domain, info, dev))
> msi_domain_prepare_irqs
> __msi_domain_alloc_irqs
> msi_domain_alloc_irqs_descs_locked
>
> What I am suggesting is commit 0f62d941acf9 changed how this return
> value is being handled and created a UAF
OK, this makes more sense.
But msi_domain_prepare_irqs() shouldn't fail in this case, and we
should proceed with the allocation of at least one vector, which isn't
happening here.
Also, if __msi_domain_alloc_irqs() is supposed to return the number of
irqs allocated, it isn't doing it consistently.
Thomas, can you shed some light on what is the intended behaviour
here?
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] genirq/msi: fix crash when handling Multi-MSI
2022-01-17 11:36 ` Marc Zyngier
@ 2022-01-18 14:39 ` Thomas Gleixner
2022-01-19 0:44 ` Thomas Gleixner
0 siblings, 1 reply; 10+ messages in thread
From: Thomas Gleixner @ 2022-01-18 14:39 UTC (permalink / raw)
To: Marc Zyngier, Tong Zhang; +Cc: Jason Gunthorpe, open list
On Mon, Jan 17 2022 at 11:36, Marc Zyngier wrote:
> On Mon, 17 Jan 2022 10:10:13 +0000,
> Tong Zhang <ztong0001@gmail.com> wrote:
>> pci_msi_domain_check_cap (used by ops->msi_check(domain, info, dev))
>> msi_domain_prepare_irqs
>> __msi_domain_alloc_irqs
>> msi_domain_alloc_irqs_descs_locked
>>
>> What I am suggesting is commit 0f62d941acf9 changed how this return
>> value is being handled and created a UAF
>
> OK, this makes more sense.
>
> But msi_domain_prepare_irqs() shouldn't fail in this case, and we
> should proceed with the allocation of at least one vector, which isn't
> happening here.
>
> Also, if __msi_domain_alloc_irqs() is supposed to return the number of
> irqs allocated, it isn't doing it consistently.
>
> Thomas, can you shed some light on what is the intended behaviour
> here?
Let me stare at it.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] genirq/msi: fix crash when handling Multi-MSI
2022-01-18 14:39 ` Thomas Gleixner
@ 2022-01-19 0:44 ` Thomas Gleixner
2022-01-19 17:54 ` [PATCH] PCI/MSI: Prevent UAF in error path Thomas Gleixner
0 siblings, 1 reply; 10+ messages in thread
From: Thomas Gleixner @ 2022-01-19 0:44 UTC (permalink / raw)
To: Marc Zyngier, Tong Zhang; +Cc: Jason Gunthorpe, open list
On Tue, Jan 18 2022 at 15:39, Thomas Gleixner wrote:
> On Mon, Jan 17 2022 at 11:36, Marc Zyngier wrote:
>> On Mon, 17 Jan 2022 10:10:13 +0000,
>> Tong Zhang <ztong0001@gmail.com> wrote:
>>> pci_msi_domain_check_cap (used by ops->msi_check(domain, info, dev))
>>> msi_domain_prepare_irqs
>>> __msi_domain_alloc_irqs
>>> msi_domain_alloc_irqs_descs_locked
>>>
>>> What I am suggesting is commit 0f62d941acf9 changed how this return
>>> value is being handled and created a UAF
>>
>> OK, this makes more sense.
>>
>> But msi_domain_prepare_irqs() shouldn't fail in this case, and we
>> should proceed with the allocation of at least one vector, which isn't
>> happening here.
>>
>> Also, if __msi_domain_alloc_irqs() is supposed to return the number of
>> irqs allocated, it isn't doing it consistently.
>>
>> Thomas, can you shed some light on what is the intended behaviour
>> here?
>
> Let me stare at it.
It's a subtle issue I overlooked. The UAF is due to
err:
pci_msi_unmask(entry, msi_multi_mask(entry));
in msi_capability_init() because the core has torn down and freed the
entry already.
The proposed patch "fixes" the issue for the PCI/MSI case, but could
cause a memory leak for other callers.
Not sure yet what the proper fix is, but that has to wait until tomorrow
when brain becomes awake again.
Thanks,
tglx
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] PCI/MSI: Prevent UAF in error path
2022-01-19 0:44 ` Thomas Gleixner
@ 2022-01-19 17:54 ` Thomas Gleixner
2022-01-19 18:37 ` Bjorn Helgaas
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Thomas Gleixner @ 2022-01-19 17:54 UTC (permalink / raw)
To: Marc Zyngier, Tong Zhang; +Cc: Jason Gunthorpe, open list, Bjorn Helgaas
When the core MSI allocation fails, then the PCI/MSI code uses an already
freed MSI descriptor to unmask the MSI mask register in order to bring it back
into reset state.
Remove MSI_FLAG_FREE_MSI_DESCS from the PCI/MSI irqdomain flags and let the
PCI/MSI code free the MSI descriptors after usage.
Fixes: 0f62d941acf9 ("genirq/msi: Provide msi_domain_alloc/free_irqs_descs_locked()")
Reported-by: Tong Zhang <ztong0001@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/pci/msi/irqdomain.c | 4 ++--
drivers/pci/msi/legacy.c | 1 -
2 files changed, 2 insertions(+), 3 deletions(-)
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -28,6 +28,7 @@ void pci_msi_teardown_msi_irqs(struct pc
msi_domain_free_irqs_descs_locked(domain, &dev->dev);
else
pci_msi_legacy_teardown_msi_irqs(dev);
+ msi_free_msi_descs(&dev->dev);
}
/**
@@ -171,8 +172,7 @@ struct irq_domain *pci_msi_create_irq_do
if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
pci_msi_domain_update_chip_ops(info);
- info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS |
- MSI_FLAG_FREE_MSI_DESCS;
+ info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS;
if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE))
info->flags |= MSI_FLAG_MUST_REACTIVATE;
--- a/drivers/pci/msi/legacy.c
+++ b/drivers/pci/msi/legacy.c
@@ -77,5 +77,4 @@ void pci_msi_legacy_teardown_msi_irqs(st
{
msi_device_destroy_sysfs(&dev->dev);
arch_teardown_msi_irqs(dev);
- msi_free_msi_descs(&dev->dev);
}
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] PCI/MSI: Prevent UAF in error path
2022-01-19 17:54 ` [PATCH] PCI/MSI: Prevent UAF in error path Thomas Gleixner
@ 2022-01-19 18:37 ` Bjorn Helgaas
2022-01-19 18:54 ` Tong Zhang
2022-01-21 1:18 ` [tip: irq/urgent] " tip-bot2 for Thomas Gleixner
2 siblings, 0 replies; 10+ messages in thread
From: Bjorn Helgaas @ 2022-01-19 18:37 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Marc Zyngier, Tong Zhang, Jason Gunthorpe, open list
On Wed, Jan 19, 2022 at 06:54:52PM +0100, Thomas Gleixner wrote:
> When the core MSI allocation fails, then the PCI/MSI code uses an already
> freed MSI descriptor to unmask the MSI mask register in order to bring it back
> into reset state.
>
> Remove MSI_FLAG_FREE_MSI_DESCS from the PCI/MSI irqdomain flags and let the
> PCI/MSI code free the MSI descriptors after usage.
>
> Fixes: 0f62d941acf9 ("genirq/msi: Provide msi_domain_alloc/free_irqs_descs_locked()")
> Reported-by: Tong Zhang <ztong0001@gmail.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
What does "UAF" stand for? Ah, "use after free" I guess?
Let me know if I should take this. Otherwise I assume it'll go
whereever 0f62d941acf9 went.
> ---
> drivers/pci/msi/irqdomain.c | 4 ++--
> drivers/pci/msi/legacy.c | 1 -
> 2 files changed, 2 insertions(+), 3 deletions(-)
>
> --- a/drivers/pci/msi/irqdomain.c
> +++ b/drivers/pci/msi/irqdomain.c
> @@ -28,6 +28,7 @@ void pci_msi_teardown_msi_irqs(struct pc
> msi_domain_free_irqs_descs_locked(domain, &dev->dev);
> else
> pci_msi_legacy_teardown_msi_irqs(dev);
> + msi_free_msi_descs(&dev->dev);
> }
>
> /**
> @@ -171,8 +172,7 @@ struct irq_domain *pci_msi_create_irq_do
> if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
> pci_msi_domain_update_chip_ops(info);
>
> - info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS |
> - MSI_FLAG_FREE_MSI_DESCS;
> + info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS;
> if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE))
> info->flags |= MSI_FLAG_MUST_REACTIVATE;
>
> --- a/drivers/pci/msi/legacy.c
> +++ b/drivers/pci/msi/legacy.c
> @@ -77,5 +77,4 @@ void pci_msi_legacy_teardown_msi_irqs(st
> {
> msi_device_destroy_sysfs(&dev->dev);
> arch_teardown_msi_irqs(dev);
> - msi_free_msi_descs(&dev->dev);
> }
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] PCI/MSI: Prevent UAF in error path
2022-01-19 17:54 ` [PATCH] PCI/MSI: Prevent UAF in error path Thomas Gleixner
2022-01-19 18:37 ` Bjorn Helgaas
@ 2022-01-19 18:54 ` Tong Zhang
2022-01-21 1:18 ` [tip: irq/urgent] " tip-bot2 for Thomas Gleixner
2 siblings, 0 replies; 10+ messages in thread
From: Tong Zhang @ 2022-01-19 18:54 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Marc Zyngier, Jason Gunthorpe, open list, Bjorn Helgaas
On Wed, Jan 19, 2022 at 9:54 AM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> When the core MSI allocation fails, then the PCI/MSI code uses an already
> freed MSI descriptor to unmask the MSI mask register in order to bring it back
> into reset state.
>
> Remove MSI_FLAG_FREE_MSI_DESCS from the PCI/MSI irqdomain flags and let the
> PCI/MSI code free the MSI descriptors after usage.
>
> Fixes: 0f62d941acf9 ("genirq/msi: Provide msi_domain_alloc/free_irqs_descs_locked()")
> Reported-by: Tong Zhang <ztong0001@gmail.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> drivers/pci/msi/irqdomain.c | 4 ++--
> drivers/pci/msi/legacy.c | 1 -
> 2 files changed, 2 insertions(+), 3 deletions(-)
>
> --- a/drivers/pci/msi/irqdomain.c
> +++ b/drivers/pci/msi/irqdomain.c
> @@ -28,6 +28,7 @@ void pci_msi_teardown_msi_irqs(struct pc
> msi_domain_free_irqs_descs_locked(domain, &dev->dev);
> else
> pci_msi_legacy_teardown_msi_irqs(dev);
> + msi_free_msi_descs(&dev->dev);
> }
>
> /**
> @@ -171,8 +172,7 @@ struct irq_domain *pci_msi_create_irq_do
> if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
> pci_msi_domain_update_chip_ops(info);
>
> - info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS |
> - MSI_FLAG_FREE_MSI_DESCS;
> + info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS;
> if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE))
> info->flags |= MSI_FLAG_MUST_REACTIVATE;
>
> --- a/drivers/pci/msi/legacy.c
> +++ b/drivers/pci/msi/legacy.c
> @@ -77,5 +77,4 @@ void pci_msi_legacy_teardown_msi_irqs(st
> {
> msi_device_destroy_sysfs(&dev->dev);
> arch_teardown_msi_irqs(dev);
> - msi_free_msi_descs(&dev->dev);
> }
Tested-by: Tong Zhang <ztong0001@gmail.com>
Tested on my setup, it no longer crashes.
Thanks!
- Tong
^ permalink raw reply [flat|nested] 10+ messages in thread
* [tip: irq/urgent] PCI/MSI: Prevent UAF in error path
2022-01-19 17:54 ` [PATCH] PCI/MSI: Prevent UAF in error path Thomas Gleixner
2022-01-19 18:37 ` Bjorn Helgaas
2022-01-19 18:54 ` Tong Zhang
@ 2022-01-21 1:18 ` tip-bot2 for Thomas Gleixner
2 siblings, 0 replies; 10+ messages in thread
From: tip-bot2 for Thomas Gleixner @ 2022-01-21 1:18 UTC (permalink / raw)
To: linux-tip-commits
Cc: Tong Zhang, Thomas Gleixner, Bjorn Helgaas, x86, linux-kernel,
maz
The following commit has been merged into the irq/urgent branch of tip:
Commit-ID: a0af3d1104f752b6d0dba71788e3fddd67c857a7
Gitweb: https://git.kernel.org/tip/a0af3d1104f752b6d0dba71788e3fddd67c857a7
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Wed, 19 Jan 2022 18:54:52 +01:00
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Fri, 21 Jan 2022 02:14:46 +01:00
PCI/MSI: Prevent UAF in error path
When the core MSI allocation fails, then the PCI/MSI code uses an already
freed MSI descriptor to unmask the MSI mask register in order to bring it back
into reset state.
Remove MSI_FLAG_FREE_MSI_DESCS from the PCI/MSI irqdomain flags and let the
PCI/MSI code free the MSI descriptors after usage.
Fixes: 0f62d941acf9 ("genirq/msi: Provide msi_domain_alloc/free_irqs_descs_locked()")
Reported-by: Tong Zhang <ztong0001@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Tong Zhang <ztong0001@gmail.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/r/87r1938vbn.ffs@tglx
---
drivers/pci/msi/irqdomain.c | 4 ++--
drivers/pci/msi/legacy.c | 1 -
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
index 0d63541..e9cf318 100644
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -28,6 +28,7 @@ void pci_msi_teardown_msi_irqs(struct pci_dev *dev)
msi_domain_free_irqs_descs_locked(domain, &dev->dev);
else
pci_msi_legacy_teardown_msi_irqs(dev);
+ msi_free_msi_descs(&dev->dev);
}
/**
@@ -171,8 +172,7 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
pci_msi_domain_update_chip_ops(info);
- info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS |
- MSI_FLAG_FREE_MSI_DESCS;
+ info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS;
if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE))
info->flags |= MSI_FLAG_MUST_REACTIVATE;
diff --git a/drivers/pci/msi/legacy.c b/drivers/pci/msi/legacy.c
index cdbb468..db761ad 100644
--- a/drivers/pci/msi/legacy.c
+++ b/drivers/pci/msi/legacy.c
@@ -77,5 +77,4 @@ void pci_msi_legacy_teardown_msi_irqs(struct pci_dev *dev)
{
msi_device_destroy_sysfs(&dev->dev);
arch_teardown_msi_irqs(dev);
- msi_free_msi_descs(&dev->dev);
}
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-01-21 1:19 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-17 9:27 [PATCH v1] genirq/msi: fix crash when handling Multi-MSI Tong Zhang
2022-01-17 9:59 ` Marc Zyngier
2022-01-17 10:10 ` Tong Zhang
2022-01-17 11:36 ` Marc Zyngier
2022-01-18 14:39 ` Thomas Gleixner
2022-01-19 0:44 ` Thomas Gleixner
2022-01-19 17:54 ` [PATCH] PCI/MSI: Prevent UAF in error path Thomas Gleixner
2022-01-19 18:37 ` Bjorn Helgaas
2022-01-19 18:54 ` Tong Zhang
2022-01-21 1:18 ` [tip: irq/urgent] " tip-bot2 for Thomas Gleixner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).