aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-04-18 16:11:23 +0200
committerJan Beulich <jbeulich@suse.com>2013-04-18 16:11:23 +0200
commit545607eb3cfeb2abf5742d1bb869734f317fcfe5 (patch)
tree6039c103db155c2f36625ffd75d7262d5dfdc5c4 /tools/libxl
parentfdac9515607b757c044e7ef0d61b1453ef999b08 (diff)
downloadxen-545607eb3cfeb2abf5742d1bb869734f317fcfe5.tar.gz
xen-545607eb3cfeb2abf5742d1bb869734f317fcfe5.tar.bz2
xen-545607eb3cfeb2abf5742d1bb869734f317fcfe5.zip
x86: fix various issues with handling guest IRQs
- properly revoke IRQ access in map_domain_pirq() error path - don't permit replacing an in use IRQ - don't accept inputs in the GSI range for MAP_PIRQ_TYPE_MSI - track IRQ access permission in host IRQ terms, not guest IRQ ones (and with that, also disallow Dom0 access to IRQ0) This is CVE-2013-1919 / XSA-46. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'tools/libxl')
-rw-r--r--tools/libxl/libxl_create.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 19a56c0c77..cb9c822785 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -966,14 +966,16 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev,
}
for (i = 0; i < d_config->b_info.num_irqs; i++) {
- uint32_t irq = d_config->b_info.irqs[i];
+ int irq = d_config->b_info.irqs[i];
- LOG(DEBUG, "dom%d irq %"PRIx32, domid, irq);
+ LOG(DEBUG, "dom%d irq %d", domid, irq);
- ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1);
+ ret = irq >= 0 ? xc_physdev_map_pirq(CTX->xch, domid, irq, &irq)
+ : -EOVERFLOW;
+ if (!ret)
+ ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1);
if (ret < 0) {
- LOGE(ERROR,
- "failed give dom%d access to irq %"PRId32, domid, irq);
+ LOGE(ERROR, "failed give dom%d access to irq %d", domid, irq);
ret = ERROR_FAIL;
}
}