Hi, On 15-03-17 07:36, Lv Zheng wrote:
Originally AML table sanity check is only done for Load opcode, as acpi_tb_compare_tables() is only invoked in acpi_tb_install_standard_table(). While LoadTable opcode cannot be covered as it directly invokes acpi_tb_load_table() without invoking acpi_tb_install_standard_table(). Furthermore, standard table load also cannot be covered as acpi_ns_load_table() is invoked instead of acpi_tb_install_standard_table() and acpi_tb_load_table(). So it becomes a problem if a duplicate table is in RSDT/XSDT, there is no such check implemented for static load tables and LoadTable opcode. This patchset combines code paths (in return reduces some redundant code blocks and enhances checks/locks) so that duplicate table detection can be applied to all cases.
I can confirm that this series fixes the errors I was seeing on my GPD win machine. Note as explained in my reply to Robert I believe that the last patch from the series can be dropped: "On 15-03-17 04:05, Moore, Robert wrote: > And I would suppose a refinement would be: > > Compare headers > If headers match, compare entire tables. The existing memcmp already does that since the header is in the front, and memcmp will stop on the first difference, so there is no need to change anything." As Robert mentions we really a should compare the entire table if the checksums match since an 8 bit checksum is really weak and if we want to do that a simple memcmp will suffice as that will already exit directly if the checksum mismatches as the checksum is before the actual data. Regards, Hans
Lv Zheng (7): ACPICA: Tables: Cleanup table handler invokers ACPICA: Tables: Add sanity check for load_table opcode ACPICA: Tables: Add sanity check for table install ACPICA: Tables: Fix an unwanted exception for table reloading ACPICA: Tables: Enable acpi_ut_is_aml_table() for all ACPICA modules ACPICA: Tables: Add sanity check for static table load ACPICA: Tables: Change table comparison using table header for static load tables drivers/acpi/acpica/actables.h | 7 +- drivers/acpi/acpica/acutils.h | 4 +- drivers/acpi/acpica/exconfig.c | 2 +- drivers/acpi/acpica/nsload.c | 18 --- drivers/acpi/acpica/tbdata.c | 288 ++++++++++++++++++++++++++++++++++++----- drivers/acpi/acpica/tbinstal.c | 197 ++++++---------------------- drivers/acpi/acpica/tbxfload.c | 46 +------ drivers/acpi/acpica/utmisc.c | 27 ++-- include/acpi/actbl.h | 1 + 9 files changed, 325 insertions(+), 265 deletions(-)
-- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html