From patchwork Tue Mar 30 08:20:08 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eduard - Gabriel Munteanu X-Patchwork-Id: 48972 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id E7E86B7CB6 for ; Wed, 31 Mar 2010 01:37:36 +1100 (EST) Received: from localhost ([127.0.0.1]:33926 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NwcTA-00011h-Pc for incoming@patchwork.ozlabs.org; Tue, 30 Mar 2010 10:31:04 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NwWgf-0003Nv-O4 for qemu-devel@nongnu.org; Tue, 30 Mar 2010 04:20:37 -0400 Received: from [140.186.70.92] (port=40363 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NwWga-0003LX-Ni for qemu-devel@nongnu.org; Tue, 30 Mar 2010 04:20:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NwWgY-00049Z-Al for qemu-devel@nongnu.org; Tue, 30 Mar 2010 04:20:32 -0400 Received: from mail-bw0-f218.google.com ([209.85.218.218]:62851) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NwWgY-00048C-3S for qemu-devel@nongnu.org; Tue, 30 Mar 2010 04:20:30 -0400 Received: by mail-bw0-f218.google.com with SMTP id 10so14273957bwz.2 for ; Tue, 30 Mar 2010 01:20:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:from:to:cc:subject :date:message-id:x-mailer:in-reply-to:references; bh=yMnBpPz4OiEZ/sFi+gZZhkrltAbe+I/31qpBZmlm/qk=; b=f2pz3M7vLkCWf23J/2RVsB3B8GakcrpZH04hNfUKKLFoUOz3toGV+Qtd8wVuZymbrK J6W7gcbPL3TL9qWVPCstsmqDr9uRIIy+1rbyfjqU+pRP9IIOMnc9IuNxL8KTprzEl505 120YNhutDHNAqolMeJmScKGgQ3B3ho+a+yu20= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; b=L4uLDIYyeI8NwUPqqX9WGXVFFt1wCqRxBHOmF5vaeeI4J9lpNZkvaRY+jWisBMKfmJ YTwjPuiv9f1Qy2vRFvAiQTR64XM1idbPA3DM3jDYUgoD2RiFqafif0+f7mKJ8Jle5qKP FtL97cNlaNRmL4LpHkoJ9H6/E+dQOEPuJyMCI= Received: by 10.204.146.148 with SMTP id h20mr7488175bkv.185.1269937229398; Tue, 30 Mar 2010 01:20:29 -0700 (PDT) Received: from localhost.localdomain ([188.25.93.130]) by mx.google.com with ESMTPS id 16sm2589620bwz.9.2010.03.30.01.20.28 (version=SSLv3 cipher=RC4-MD5); Tue, 30 Mar 2010 01:20:29 -0700 (PDT) From: Eduard - Gabriel Munteanu To: joro@8bytes.org Date: Tue, 30 Mar 2010 11:20:08 +0300 Message-Id: <7498607873ad7c9ff59d0a24d35391c0e4ba0a11.1269936879.git.eduard.munteanu@linux360.ro> X-Mailer: git-send-email 1.6.4.4 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Mailman-Approved-At: Tue, 30 Mar 2010 10:20:55 -0400 Cc: aliguori@us.ibm.com, Eduard - Gabriel Munteanu , avi@redhat.com, kvm@vger.kernel.org, qemu-devel@nongnu.org Subject: [Qemu-devel] [RFC PATCH 7/7] acpi: fix bug in acpi_checksum() caused by garbage in checksum field X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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 --- 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; }