File CVE-2012-3498-xsa16.patch of Package xen.openSUSE_12.1_Update
x86/pvhvm: properly range-check PHYSDEVOP_map_pirq/MAP_PIRQ_TYPE_GSI
This is being used as a array index, and hence must be validated before
use.
This is XSA-16 / CVE-2012-3498.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Index: xen-4.1.3-testing/xen/arch/x86/physdev.c
===================================================================
--- xen-4.1.3-testing.orig/xen/arch/x86/physdev.c
+++ xen-4.1.3-testing/xen/arch/x86/physdev.c
@@ -44,11 +44,18 @@ static int physdev_hvm_map_pirq(
struct hvm_girq_dpci_mapping *girq;
uint32_t machine_gsi = 0;
+ if ( map->index < 0 || map->index >= NR_HVM_IRQS )
+ {
+ ret = -EINVAL;
+ break;
+ }
+
/* find the machine gsi corresponding to the
* emulated gsi */
hvm_irq_dpci = domain_get_irq_dpci(d);
if ( hvm_irq_dpci )
{
+ BUILD_BUG_ON(ARRAY_SIZE(hvm_irq_dpci->girq) < NR_HVM_IRQS);
list_for_each_entry ( girq,
&hvm_irq_dpci->girq[map->index],
list )