mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
passthrough/x86: stop pirq iteration immediately in case of error
pt_pirq_iterate() will iterate in batch over all the PIRQs. The outer loop will bail out if 'rc' is non-zero but the inner loop will continue. This means 'rc' will get clobbered and we may miss any errors (such as -ERESTART in the case of the callback pci_clean_dpci_irq()). This is CVE-2022-23035 / XSA-395. Fixes:c24536b636("replace d->nr_pirqs sized arrays with radix tree") Fixes:f6dd295381("dpci: replace tasklet with softirq") Signed-off-by: Julien Grall <jgrall@amazon.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> master commit:9480a1a519master date: 2022-01-25 13:27:02 +0100
This commit is contained in:
1 parent
2700abffa5
commit
13e7fe4c93
1 file changed
+4
@@ -810,7 +810,11 @@ int pt_pirq_iterate(struct domain *d,
|
||||
|
||||
pirq = pirqs[i]->pirq;
|
||||
if ( (pirq_dpci->flags & HVM_IRQ_DPCI_MAPPED) )
|
||||
{
|
||||
rc = cb(d, pirq_dpci, arg);
|
||||
if ( rc )
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while ( !rc && ++pirq < d->nr_pirqs && n == ARRAY_SIZE(pirqs) );
|
||||
|
||||
|
||||