From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 488B93858C41; Thu, 1 Jun 2023 11:04:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 488B93858C41 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1685617470; bh=nCz7uj6Fzv/W5JCEv1DbGfHl6YVL7c1GbM2trl/2RfM=; h=From:To:Subject:Date:From; b=AvMUdKfFBGTk8YkpyC+GJZgURQqzRrw0k7CE6FJc2fpxo/KC0dIxFJVvWgt95WH7m b94U+YuvZk/Ti1qbI3txk2daULukIkrDzDzhJX4qwAIOlWoDVrl0Y0B8leUKKSGAPI 32p2YFTenxCHO8kpiz3PoajgnCTRsuVAP7+HzqvI= From: "lersek at redhat dot com" To: debugedit@sourceware.org Subject: [Bug find-debuginfo/30505] New: unchecked "gdb-add-index" invocation Date: Thu, 01 Jun 2023 11:04:29 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: debugedit X-Bugzilla-Component: find-debuginfo X-Bugzilla-Version: unspecified X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: lersek at redhat dot com X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter cc target_milestone Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://sourceware.org/bugzilla/show_bug.cgi?id=3D30505 Bug ID: 30505 Summary: unchecked "gdb-add-index" invocation Product: debugedit Version: unspecified Status: NEW Severity: normal Priority: P2 Component: find-debuginfo Assignee: unassigned at sourceware dot org Reporter: lersek at redhat dot com CC: debugedit at sourceware dot org Target Milestone: --- As of commit 5bade25a11b5, "scripts/find-debuginfo.in" contains: >| # Add .gdb_index if requested. >| if $include_gdb_index; then >| if type gdb-add-index >/dev/null 2>&1; then >| gdb-add-index "$f" >| else >| echo >&2 "*** ERROR: GDB index requested, but no gdb-add-index ins= talled" >| exit 2 >| fi >| fi If the objcopy invocation underlying "gdb-add-index" fails, then "gdb-add-index" propagates that issue through its exit status; however, "find-debuginfo" ignores it (see above). This allows RPM builds to succeed if debuginfo extraction is started with "-i" (i.e., GDB index is being requested), gdb-add-index is available, but gdb-add-index fails for some reason. One example is a shared library object that contains Perl bindings for a C-language library. Perl's ExtUtils::Install module installs artifacts in read-only mode. On a read-only .so, objcopy fails, hence gdb-add-index fails. Yet the RPM build succeeds, resulting in such debuginfo (*.so.debug) files that lack the .gdb_index section. The expected behavior is that the RPM build fail, similarly to how it currently fails if "-i" is passed to "find-debuginfo", but "gdb-add-index" is unavailable (see the"exit 2" statement in the quote). Installing files in read-only mode is arguably a bug in ExtUtils::Install itself ; however, that does not mean "find-debuginfo" should ignore "gdb-add-index" failures. I figure something like the following might work: >| diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in >| index 7dec3c3bfdc5..e0d931175cd9 100755 >| --- a/scripts/find-debuginfo.in >| +++ b/scripts/find-debuginfo.in >| @@ -470,6 +470,10 @@ do_file() >| if $include_gdb_index; then >| if type gdb-add-index >/dev/null 2>&1; then >| gdb-add-index "$f" >| + exit_status=3D$? >| + if test $exit_status -ne 0; then >| + exit $exit_status >| + fi >| else >| echo >&2 "*** ERROR: GDB index requested, but no gdb-add-index in= stalled" >| exit 2 However, "find-debuginfo" seems to have an (undocumented) convention where it uses only exit statuses 1 and 2. In that case, propagating the exit status from gdb-add-index may not be right. Then one alternative would be: >| diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in >| index 7dec3c3bfdc5..99cb3b906a00 100755 >| --- a/scripts/find-debuginfo.in >| +++ b/scripts/find-debuginfo.in >| @@ -469,7 +469,7 @@ do_file() >| # Add .gdb_index if requested. >| if $include_gdb_index; then >| if type gdb-add-index >/dev/null 2>&1; then >| - gdb-add-index "$f" >| + gdb-add-index "$f" || exit 1 >| else >| echo >&2 "*** ERROR: GDB index requested, but no gdb-add-index in= stalled" >| exit 2 Note that the problem (not checking the exit status of gdb-add-index) dates back to the original introduction of gdb-add-index to find-debuginfo: https://github.com/rpm-software-management/rpm/commit/9570a7f6af15 https://github.com/rpm-software-management/rpm/commit/41c4dcf507e2 https://github.com/rpm-software-management/rpm/commit/67d3df338875 https://github.com/rpm-software-management/rpm/commit/04b0805a756c --=20 You are receiving this mail because: You are on the CC list for the bug.=