From patchwork Fri Jan 3 13:11:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Turney X-Patchwork-Id: 37165 Received: (qmail 33376 invoked by alias); 3 Jan 2020 13:11:51 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 33368 invoked by uid 89); 3 Jan 2020 13:11:51 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-13.7 required=5.0 tests=AWL, BAYES_00, EXECUTABLE_URI, FORGED_SPF_HELO, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_EXEURI, RCVD_IN_DNSWL_LOW, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=rva, HX-Spam-Relays-External:CriticalPath, H*RU:CriticalPath, HAuthentication-Results:smtp.auth X-HELO: sa-prd-fep-044.btinternet.com Received: from mailomta29-sa.btinternet.com (HELO sa-prd-fep-044.btinternet.com) (213.120.69.35) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 03 Jan 2020 13:11:49 +0000 Received: from sa-prd-rgout-001.btmx-prd.synchronoss.net ([10.2.38.4]) by sa-prd-fep-044.btinternet.com with ESMTP id <20200103131147.JAKT8432.sa-prd-fep-044.btinternet.com@sa-prd-rgout-001.btmx-prd.synchronoss.net>; Fri, 3 Jan 2020 13:11:47 +0000 Authentication-Results: btinternet.com; auth=pass (PLAIN) smtp.auth=jonturney@btinternet.com X-OWM-Source-IP: 31.51.207.12 (GB) X-OWM-Env-Sender: jonturney@btinternet.com X-VadeSecure-score: verdict=clean score=0/300, class=clean Received: from [192.168.1.106] (31.51.207.12) by sa-prd-rgout-001.btmx-prd.synchronoss.net (5.8.337) (authenticated as jonturney@btinternet.com) id 5DF93CE102B5A897; Fri, 3 Jan 2020 13:11:47 +0000 Subject: Re: [PATCH] Fix a crash with a malformed PE header To: gdb-patches@sourceware.org References: <20200102125405.11499-1-jon.turney@dronecode.org.uk> <835zhuj71c.fsf@gnu.org> Cc: Eli Zaretskii From: Jon Turney Message-ID: <39b8efed-e23e-db20-4b28-332ceda2d8df@dronecode.org.uk> Date: Fri, 3 Jan 2020 13:11:24 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <835zhuj71c.fsf@gnu.org> On 02/01/2020 13:56, Eli Zaretskii wrote: >> From: Jon Turney >> Cc: Jon Turney >> Date: Thu, 2 Jan 2020 12:54:05 +0000 >> >> --- a/gdb/coff-pe-read.c >> +++ b/gdb/coff-pe-read.c >> @@ -441,6 +441,12 @@ read_pe_exported_syms (minimal_symbol_reader &reader, >> } >> } >> >> + if (expptr == 0) >> + { >> + /* no section contains export table rva */ >> + return; >> + } >> + > > Thanks. Would it make sense to produce some diagnostic output here, > when an appropriate debug-FOO option is set? Yes, I suppose that's better than just a comment. How about the attached? From b78ee5736d93d7fa3476a69cc11229c047f477ec Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Thu, 2 Jan 2020 00:25:56 +0000 Subject: [PATCH] Fix a crash with a malformed PE header Don't try to read the PE export table when no section contains the RVA for it. (I have a PE executable [1] packed with UPX, where the export table data directory entry contains a RVA which doesn't correspond to any section. Mistakenly trying to debug this with gdb makes it crash.) [1] https://cygwin.com/setup/setup-2.898.x86_64.exe 2020-01-02 Jon Turney * coff-pe-read.c (read_pe_exported_syms): Don't try to read the export table if no section contains it's RVA. --- gdb/ChangeLog | 5 +++++ gdb/coff-pe-read.c | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c index b05357bb8b..926db57e58 100644 --- a/gdb/coff-pe-read.c +++ b/gdb/coff-pe-read.c @@ -441,6 +441,15 @@ read_pe_exported_syms (minimal_symbol_reader &reader, } } + if (expptr == 0) + { + if (debug_coff_pe_read) + fprintf_unfiltered (gdb_stdlog, _("No section contains export RVA for " + "dll \"%s\"\n"), + dll_name); + return; + } + export_rva = export_opthdrrva; export_size = export_opthdrsize;