vtd: During parsing DMAR table, if find RMRR is incorrect, return error.
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 23 Jul 2008 08:58:48 +0000 (09:58 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 23 Jul 2008 08:58:48 +0000 (09:58 +0100)
Signed-off-by: Weidong Han <weidong.han@intel.com>
xen/drivers/passthrough/vtd/dmar.c

index 501622edd1ddc7983d72766b666b47fd62b07472..1d39575ecc6dce67f6a4d5c6387198f109efcb69 100644 (file)
@@ -349,6 +349,12 @@ acpi_parse_one_rmrr(struct acpi_dmar_entry_header *header)
     void *dev_scope_start, *dev_scope_end;
     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;