vtd: During parsing DMAR table, if find RMRR is incorrect, return error. Signed-off-by: Weidong Han xen-unstable changeset: 18114:ba6be1571cc628298c5a0666f261b660fdcaeac0 xen-unstable date: Wed Jul 23 09:58:48 2008 +0100 diff -r c8c4c8fcd6fd -r 13c740aa445f xen/arch/x86/hvm/vmx/vtd/dmar.c --- a/xen/arch/x86/hvm/vmx/vtd/dmar.c Fri Jul 25 19:20:02 2008 +0800 +++ b/xen/arch/x86/hvm/vmx/vtd/dmar.c Fri Jul 25 19:23:16 2008 +0800 @@ -436,6 +436,12 @@ acpi_parse_one_rmrr(struct acpi_dmar_ent struct acpi_rmrr_unit *rmrru; int ret = 0; + if ( rmrr->base_address >= rmrr->end_address ) + { + dprintk(XENLOG_ERR VTDPREFIX, "RMRR is incorrect.\n"); + return -EFAULT; + } + rmrru = xmalloc(struct acpi_rmrr_unit); if ( !rmrru ) return -ENOMEM;