From patchwork Tue Aug 31 13:19:51 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 144911 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o7VDdwQr004252 for ; Tue, 31 Aug 2010 13:40:12 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754036Ab0HaNj5 (ORCPT ); Tue, 31 Aug 2010 09:39:57 -0400 Received: from vpn.id2.novell.com ([195.33.99.129]:34844 "EHLO vpn.id2.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757369Ab0HaNj5 convert rfc822-to-8bit (ORCPT ); Tue, 31 Aug 2010 09:39:57 -0400 Received: from EMEA1-MTA by vpn.id2.novell.com with Novell_GroupWise; Tue, 31 Aug 2010 18:30:22 +0100 Message-Id: <4C7D1D9702000078000132F6@vpn.id2.novell.com> X-Mailer: Novell GroupWise Internet Agent 8.0.1 Date: Tue, 31 Aug 2010 14:19:51 +0100 From: "Jan Beulich" To: Cc: Subject: [PATCH] ACPI/HEST: avoid stack traces when encountering duplicate source IDs Mime-Version: 1.0 Content-Disposition: inline Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Tue, 31 Aug 2010 13:40:34 +0000 (UTC) --- linux-2.6.36-rc3/drivers/acpi/apei/hest.c +++ 2.6.36-rc3-acpi-hest-duplicate-source/drivers/acpi/apei/hest.c @@ -140,6 +140,7 @@ static int hest_parse_ghes(struct acpi_h struct acpi_hest_generic *generic; struct platform_device *ghes_dev; struct ghes_arr *ghes_arr = data; + unsigned int i; int rc; if (hest_hdr->type != ACPI_HEST_TYPE_GENERIC_ERROR) @@ -147,6 +148,17 @@ static int hest_parse_ghes(struct acpi_h generic = (struct acpi_hest_generic *)hest_hdr; if (!generic->enabled) return 0; + for (i = 0; i < ghes_arr->count; ++i) { + const struct acpi_hest_generic *g; + + g = ghes_arr->ghes_devs[i]->dev.platform_data; + if (hest_hdr->source_id == g->header.source_id) { + printk(KERN_WARNING + "Duplicate generic error source ID %#x\n", + hest_hdr->source_id); + return -EEXIST; + } + } ghes_dev = platform_device_alloc("GHES", hest_hdr->source_id); if (!ghes_dev) return -ENOMEM;