mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/IRQ: avoid double unlock in map_domain_pirq()
Forever since its introduction the main loop in the function dealing
with multi-vector MSI had error exit points ("break") with different
properties: In one case no IRQ descriptor lock is being held.
Nevertheless the subsequent error cleanup path assumed such a lock would
uniformly need releasing. Identify the case by setting "desc" to NULL,
thus allowing the unlock to be skipped as necessary.
This is CVE-2024-31143 / XSA-458.
Coverity ID: 1605298
Fixes: d1b6d0a024 ("x86: enable multi-vector MSI")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
master commit: 57338346f2
master date: 2024-07-16 14:09:14 +0200
This commit is contained in:
1 parent
d0e8f8ffbb
commit
9fe713202e
1 file changed
+4
-1
+4
-1
@@ -2215,6 +2215,7 @@ int map_domain_pirq(
|
||||
|
||||
set_domain_irq_pirq(d, irq, info);
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
desc = NULL;
|
||||
|
||||
info = NULL;
|
||||
irq = create_irq(NUMA_NO_NODE, true);
|
||||
@@ -2250,7 +2251,9 @@ int map_domain_pirq(
|
||||
|
||||
if ( ret )
|
||||
{
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
if ( desc )
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
|
||||
pci_disable_msi(msi_desc);
|
||||
if ( nr )
|
||||
{
|
||||
|
||||