From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 2002:a5d:6089:0:0:0:0:0 with SMTP id w9csp5802479wrt; Mon, 26 Nov 2018 08:31:34 -0800 (PST) X-Google-Smtp-Source: AFSGD/XO63xR+kEFhd0XCxVGpTJZ8v1fU3KFpHVQpYmet3b4ib0BlnnMBkz6mn0Q/AjM9C/wHxSb X-Received: by 2002:a25:9086:: with SMTP id t6-v6mr29656573ybl.67.1543249894201; Mon, 26 Nov 2018 08:31:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543249894; cv=none; d=google.com; s=arc-20160816; b=A1EKoE6XJX1F877HxjTAF1WFhXMADF8gf0q7rSKomrgNboIJyyJmk6xHTqCHuHsq7E wHKXkHpoRzsvrqrgSQqSt3B3+wCiTmzixiFgcXW5qmuf6kARXegGDTo0clpQUmCz/7yc O40vmLD0Gj1ZZiBq8vLBoGb7LzBwK9wfw/ndGQvM8dnz6cjHWmNnJZfxaayG27wcTjD4 J+JnW3JL6JLTPYX81NEmWrdxdJYktc1ScVhBnI7d3PxZ2ETxiPhNRmPkl/PWJ2+qmca/ ObmEw4cjd+KzFx7AhdXIhEEVV7Dbagj4S8UuJ1AHktCd6vvnrUdJCewisEEF3pKpW3xa bpVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from; bh=BVTFqVmZq+6f/IfAVgXUYJn9ZdxnbbWAidip6N0uG5c=; b=t0htUqsow1amPgYFeS59vDa5n1dF+Ny5z7Kd1NRcj4VYeyin7v/bacb6IIz5AHaDRg n7VSkrvzi2HQnSwDcrvr/zflMYYQmIiVAg/ITdm2vigKS/JEFCEVul5SHAjObj6pVV9k xjxrcgx59WjVOir57cI8YSnzL6atKNdVYuvHc5EQd05RBR2+WK7Z2ouWxNMb3JUH3O+k 2iTA5G5x8P7oekR7NNr+SyMSeaDmcPRmk6zPbjiXTNfUL1aEOR1jxVo3hVjU2fq14NKN H+wvK4UDGyNbwufTijArYleZxN2vK83u8EnkJCk9uUJNgg44vHvJbloP5otY1t+lDqj1 T4qw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id x131si582276ywd.27.2018.11.26.08.31.34 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 26 Nov 2018 08:31:34 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from localhost ([::1]:37514 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRJnJ-0000mI-H3 for alex.bennee@linaro.org; Mon, 26 Nov 2018 11:31:33 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37664) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRJmQ-0000lz-W7 for qemu-devel@nongnu.org; Mon, 26 Nov 2018 11:30:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gRJmM-0004PS-M8 for qemu-devel@nongnu.org; Mon, 26 Nov 2018 11:30:38 -0500 Received: from mga17.intel.com ([192.55.52.151]:48977) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gRJmK-0004Ix-Q1; Mon, 26 Nov 2018 11:30:34 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Nov 2018 08:30:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,283,1539673200"; d="scan'208";a="90950584" Received: from sunandos-mobl2.ger.corp.intel.com (HELO localhost.localdomain) ([10.251.82.176]) by fmsmga008.fm.intel.com with ESMTP; 26 Nov 2018 08:30:24 -0800 From: Samuel Ortiz To: qemu-devel@nongnu.org Date: Mon, 26 Nov 2018 17:29:35 +0100 Message-Id: <20181126162942.21258-3-sameo@linux.intel.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181126162942.21258-1-sameo@linux.intel.com> References: <20181126162942.21258-1-sameo@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.151 Subject: [Qemu-devel] [PATCH 2/8] hw: arm: acpi: Fix incorrect checksums in RSDP X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Peter Maydell , Thomas Huth , Eduardo Habkost , Ben Warren , "Michael S. Tsirkin" , Ard Biesheuvel , Shannon Zhao , qemu-arm@nongnu.org, Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org Sender: "Qemu-devel" X-TUID: k97YCh+QLuto From: Igor Mammedov When RSDP table was introduced (d4bec5d87), we calculated only legacy checksum, and that was incorrect as it - specified rev=2 and forgot about extended checksum. - legacy checksum calculated on full table instead of the 1st 20 bytes Fix it by adding extended checksum calculation and using correct size for legacy checksum. While at it use explicit constants to specify sub/full tables sizes instead of relying on AcpiRsdpDescriptor size and fields offsets. The follow up commits will convert this table to build_append_int_noprefix() API, will use constants anyway and remove unused AcpiRsdpDescriptor structure. Based on "[PATCH v5 05/24] hw: acpi: Implement XSDT support for RSDP" by Samuel Ortiz, who did it right in his impl. Fixes: d4bec5d87 (hw/arm/virt-acpi-build: Generate RSDP table) Signed-off-by: Igor Mammedov CC: Ard Biesheuvel CC: Shannon Zhao Reviewed-by: Samuel Ortiz --- hw/arm/virt-acpi-build.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index fcaa350892..0835900052 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -390,8 +390,13 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker, unsigned xsdt_tbl_offset) /* Checksum to be filled by Guest linker */ bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, - (char *)rsdp - rsdp_table->data, sizeof *rsdp, + (char *)rsdp - rsdp_table->data, 20 /* ACPI rev 1.0 RSDP size */, (char *)&rsdp->checksum - rsdp_table->data); + + /* Extended checksum to be filled by Guest linker */ + bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, + (char *)rsdp - rsdp_table->data, 36 /* ACPI rev 2.0 RSDP size */, + (char *)&rsdp->extended_checksum - rsdp_table->data); } static void -- 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37664) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRJmQ-0000lz-W7 for qemu-devel@nongnu.org; Mon, 26 Nov 2018 11:30:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gRJmM-0004PS-M8 for qemu-devel@nongnu.org; Mon, 26 Nov 2018 11:30:38 -0500 From: Samuel Ortiz Date: Mon, 26 Nov 2018 17:29:35 +0100 Message-Id: <20181126162942.21258-3-sameo@linux.intel.com> In-Reply-To: <20181126162942.21258-1-sameo@linux.intel.com> References: <20181126162942.21258-1-sameo@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH 2/8] hw: arm: acpi: Fix incorrect checksums in RSDP List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Igor Mammedov , qemu-arm@nongnu.org, Shannon Zhao , Laurent Vivier , Richard Henderson , Paolo Bonzini , Ben Warren , Thomas Huth , Marcel Apfelbaum , Eduardo Habkost , "Michael S. Tsirkin" , Ard Biesheuvel From: Igor Mammedov When RSDP table was introduced (d4bec5d87), we calculated only legacy checksum, and that was incorrect as it - specified rev=2 and forgot about extended checksum. - legacy checksum calculated on full table instead of the 1st 20 bytes Fix it by adding extended checksum calculation and using correct size for legacy checksum. While at it use explicit constants to specify sub/full tables sizes instead of relying on AcpiRsdpDescriptor size and fields offsets. The follow up commits will convert this table to build_append_int_noprefix() API, will use constants anyway and remove unused AcpiRsdpDescriptor structure. Based on "[PATCH v5 05/24] hw: acpi: Implement XSDT support for RSDP" by Samuel Ortiz, who did it right in his impl. Fixes: d4bec5d87 (hw/arm/virt-acpi-build: Generate RSDP table) Signed-off-by: Igor Mammedov CC: Ard Biesheuvel CC: Shannon Zhao Reviewed-by: Samuel Ortiz --- hw/arm/virt-acpi-build.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index fcaa350892..0835900052 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -390,8 +390,13 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker, unsigned xsdt_tbl_offset) /* Checksum to be filled by Guest linker */ bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, - (char *)rsdp - rsdp_table->data, sizeof *rsdp, + (char *)rsdp - rsdp_table->data, 20 /* ACPI rev 1.0 RSDP size */, (char *)&rsdp->checksum - rsdp_table->data); + + /* Extended checksum to be filled by Guest linker */ + bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, + (char *)rsdp - rsdp_table->data, 36 /* ACPI rev 2.0 RSDP size */, + (char *)&rsdp->extended_checksum - rsdp_table->data); } static void -- 2.19.1