ACPICA: Fix table compare code, length then data
authorBob Moore <robert.moore@intel.com>
Fri, 4 Jul 2008 02:57:51 +0000 (10:57 +0800)
committerLen Brown <len.brown@intel.com>
Thu, 23 Oct 2008 03:14:36 +0000 (23:14 -0400)
Split the ACPI table compare. First check that the lengths match
exactly. Then compare the data.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/tables/tbinstal.c

index 905dc38..18747ce 100644 (file)
@@ -110,7 +110,6 @@ acpi_status
 acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index)
 {
        u32 i;
-       u32 length;
        acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE(tb_add_table);
@@ -145,13 +144,18 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index)
                        }
                }
 
-               /* Check for a table match on the entire table length */
+               /*
+                * Check for a table match on the entire table length,
+                * not just the header.
+                */
+               if (table_desc->length !=
+                   acpi_gbl_root_table_list.tables[i].length) {
+                       continue;
+               }
 
-               length = ACPI_MIN(table_desc->length,
-                                 acpi_gbl_root_table_list.tables[i].length);
                if (ACPI_MEMCMP(table_desc->pointer,
                                acpi_gbl_root_table_list.tables[i].pointer,
-                               length)) {
+                               acpi_gbl_root_table_list.tables[i].length)) {
                        continue;
                }