From 9f0d0bd88a4f4eb58020c005abe0faafdf7cd041 Mon Sep 17 00:00:00 2001 From: Tony Battersby Date: Wed, 11 Feb 2009 13:24:19 -0800 Subject: [PATCH] --- yaml --- r: 131748 b: refs/heads/master c: 084eb960e81505680a9963665722d1bfd94af6a7 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/pci/dmar.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index cb0452d6c1e1..4463e5c0c2d6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 704126ad81b8cb7d3d70adb9ecb143f4d3fb38af +refs/heads/master: 084eb960e81505680a9963665722d1bfd94af6a7 diff --git a/trunk/drivers/pci/dmar.c b/trunk/drivers/pci/dmar.c index 8d3e9c261061..26c536b51c5a 100644 --- a/trunk/drivers/pci/dmar.c +++ b/trunk/drivers/pci/dmar.c @@ -330,6 +330,14 @@ parse_dmar_table(void) entry_header = (struct acpi_dmar_header *)(dmar + 1); while (((unsigned long)entry_header) < (((unsigned long)dmar) + dmar_tbl->length)) { + /* Avoid looping forever on bad ACPI tables */ + if (entry_header->length == 0) { + printk(KERN_WARNING PREFIX + "Invalid 0-length structure\n"); + ret = -EINVAL; + break; + } + dmar_table_print_dmar_entry(entry_header); switch (entry_header->type) {