The whole table must sum to zero. We need to ignore garbage in the checksum field (i.e. consider it zero) when checksumming. It is legitimate to have garbage there, as the checksum makes sense only when the table has been filled. Signed-off-by: Eduard - Gabriel Munteanu <eduard.munteanu@xxxxxxxxxxx> --- hw/acpi.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/hw/acpi.c b/hw/acpi.c index f067f85..bb015f3 100644 --- a/hw/acpi.c +++ b/hw/acpi.c @@ -832,11 +832,16 @@ size_t acpi_tables_len, acpi_tables_prev_len; static int acpi_checksum(const uint8_t *data, int len) { int sum, i; + struct acpi_table_header *acpi_hdr; sum = 0; for(i = 0; i < len; i++) sum += data[i]; + /* Ignore preexisting garbage in checksum. */ + acpi_hdr = (struct acpi_table_header *) data; + sum -= acpi_hdr->checksum; + return (-sum) & 0xff; } -- 1.6.4.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html