From patchwork Thu Sep 13 16:04:22 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: acpica: Fix segfault when disassembling AML (LP: #1050475) Date: Thu, 13 Sep 2012 06:04:22 -0000 From: Colin King X-Patchwork-Id: 183670 Message-Id: <1347552262-3494-1-git-send-email-colin.king@canonical.com> To: fwts-devel@lists.ubuntu.com From: Colin Ian King Running fwts against a collection of test tables I found a segfault in source/components/disassembler/dmopcode.c:334, due to Tag being null. This patch is a fix from Robert Moore at Intel which will land in the September release of ACPICA/iASL. Signed-off-by: Colin Ian King Acked-by: Keng-Yu Lin Acked-by: Alex Hung --- src/acpica/source/common/dmrestag.c | 5 +++++ src/acpica/source/components/disassembler/dmopcode.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/acpica/source/common/dmrestag.c b/src/acpica/source/common/dmrestag.c index 9afaad3..3097f15 100644 --- a/src/acpica/source/common/dmrestag.c +++ b/src/acpica/source/common/dmrestag.c @@ -541,6 +541,11 @@ AcpiDmCheckResourceReference ( /* Get the Index term, must be an integer constant to convert */ IndexOp = BufferNameOp->Common.Next; + + /* Major cheat: The Node field is also used for the Tag ptr. Clear it now */ + + IndexOp->Common.Node = NULL; + OpInfo = AcpiPsGetOpcodeInfo (IndexOp->Common.AmlOpcode); if (OpInfo->ObjectType != ACPI_TYPE_INTEGER) { diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c index 252b1b8..c6fa387 100644 --- a/src/acpica/source/components/disassembler/dmopcode.c +++ b/src/acpica/source/components/disassembler/dmopcode.c @@ -326,6 +326,10 @@ AcpiDmFieldPredefinedDescription ( /* Major cheat: We previously put the Tag ptr in the Node field */ Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node); + if (!Tag) + { + return; + } /* Match the name in the info table */