From patchwork Fri Nov 17 22:35:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksei Vetrov X-Patchwork-Id: 80189 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B4DBD3857836 for ; Fri, 17 Nov 2023 22:35:58 +0000 (GMT) X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by sourceware.org (Postfix) with ESMTPS id D52C93858D3C for ; Fri, 17 Nov 2023 22:35:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D52C93858D3C Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=flex--vvvvvv.bounces.google.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D52C93858D3C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::114a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700260553; cv=none; b=TegQy5HSjv+k+IrE2CWVCxT6oCQmOJBNHMi7JS4hBA5kKP8B1wDcCAhLt2WznPtLcIc6qkTtK8efstWyBG3WvWj4ox3FRwnJP54yPZ3k7QUsJmkQAgUMR9gepUZBdsBeQWNPBSo0gUi5V1H0Xb9AgjQfETCnj0qGwG0YY/e+zVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700260553; c=relaxed/simple; bh=e7+tNmznGZAqh7Moik8LfQFgDGBf2eQbr7y/8wikf9k=; h=DKIM-Signature:Date:Mime-Version:Message-ID:Subject:From:To; b=Qqql/T2k5XZZEoVWa0op47X8ZebKI42gCeLgNcXzI2y7koPjoF3ZXGrIAPoB+FImdIgXg2iBhZc7HEVLldiuOfiXtvU2GG2++1uZLxK8+zXQBeHbmeuoZzPdL2CuLM0LEh+pHEihFLo/nAv1WdCX/UzU946ROaNgiAb6DqdX0tE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5ae5b12227fso35896437b3.0 for ; Fri, 17 Nov 2023 14:35:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1700260550; x=1700865350; darn=sourceware.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=aijIirrpIvelIe3WkirdPsOkf6yJYvXaZn4bYKjCwJE=; b=p9hO7Ivps4+5z4yNVt8LunBj2rAYZXIihI1S+jKkx/soN0gPl5/RV4jFXZwDnvYlR5 0bjHc9f5a2JFkRkZq4UjN60ORe3KQzV1b8NMeTLYGbE7wC/I39s90diqF75qkQme1gEX 3T/ZKXz1gFDka296eEl7aaue5xqPkJG2Bgakk3OWi11qUNJX27NwErSU+mM4KqOp3XxG f9/gqurWnAzBiyYLMmjiv6JAs2LK5+QwjIBEvevy4/X0NHSyVfkLgyKL2gh0Mm6qhueG hWtqxArjfwdqJKyTn8fjfLgGQoJUh2bVgsjocvGXmnA3cQfJtV8kk08mZzR0bz/yR78F ltew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700260550; x=1700865350; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=aijIirrpIvelIe3WkirdPsOkf6yJYvXaZn4bYKjCwJE=; b=aZnzENk7uDHOXqL5Q3dJweQPcgPNeGAMa893sXcaKm8vwZozLO2fcndhTkjdNmvGxv E63IXwz1zQZqQ9fGigP93tdO32h3HxsApO+eZ3J59J799H2a+trELvcN3Db95y9WuNsG pBizSpyqShRccH5HXE569hFOPRCbWaMgu1DJ+CUMEX4zXrN+3SvRRGULh2ogCf2Av5xA HHZ3Q0PoC30T8c4lmU/M5g7JkKmWs1bFptvGgeOIomtUOag7pMF3PsbE2vv35PueoIAS /DGFRKEzLDlZfO7onNJRBj5IaBh3V8/qKHm19Q4AldJEBuGNVH7skHow7jsnwru8JKio 3pjA== X-Gm-Message-State: AOJu0YxIDTFumf0F7anER9gTEAzTDwSnkav33tiwDJCY8UDNPe37ga/z iBaQEuZd+xuK+AMJpaTpo4X5CpVFdPjr8J/uxZxvWAsiXasaj5VYFgLKmk+fxbqsBAvSeZhzdFu t5z0kmNimr8MOoT3gBRxPam8KQlBtCc0fZBQRwd2qkLxiZADqn1PHSzQzK266bvBVdgL1Yqc= X-Google-Smtp-Source: AGHT+IGUPzsmGusd31tupJnZuVSXRH/lD4aMvMN8KVIY8D+k6CZJO8rzfGlhrcCdVSTYbds0et3lMzNn6Wg= X-Received: from vvvvvv-dev.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:472]) (user=vvvvvv job=sendgmr) by 2002:a81:4f15:0:b0:5c5:b99f:237b with SMTP id d21-20020a814f15000000b005c5b99f237bmr24612ywb.8.1700260550171; Fri, 17 Nov 2023 14:35:50 -0800 (PST) Date: Fri, 17 Nov 2023 22:35:40 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.rc1.413.gea7ed67945-goog Message-ID: <20231117223541.920797-1-vvvvvv@google.com> Subject: [PATCH 1/2] libdwfl: handle duplicate ELFs when reporting archives From: vvvvvv@google.com To: elfutils-devel@sourceware.org Cc: kernel-team@android.com, maennich@google.com, vvvvvv@google.com X-Spam-Status: No, score=-19.2 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HK_RANDOM_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: elfutils-devel-bounces+patchwork=sourceware.org@sourceware.org From: Aleksei Vetrov When archive is processed in process_archive (libdwfl/offline.c), it creates an Elf object for each archive member. Then in process_archive_member it calls process_file to create a Dwfl_Module through __libdwfl_report_elf. The ownership of the Elf object is expected to be: * either transfered to the Dwfl_Module, if __libdwfl_report_elf returns not NULL; * or handled at the end of process_archive_member by calling elf_end. Moreover, Elf object is expected to be alive, if __libdwfl_report_elf returns not NULL, because at the end of process_archive_member it advances to the next member through the elf_next call. The problem happens when __libdwfl_report_elf encounters Elf with the same name and content as it seen before. In that case dwfl_report_module will reuse existing Dwfl_Module object. This leads to a codepath that calls elf_end on the Elf object, while returning not NULL, breaking the elf_next call to the next member. The fix is to destroy m->main.elf instead and put the new Elf object in the already existing Dwfl_Module. * libdwfl/dwfl_report_elf.c (__libdwfl_report_elf): Replace Elf in the Dwfl_Module in case of overlapping or duplicate modules to prolong its lifetime for subsequent processing. Signed-off-by: Aleksei Vetrov --- libdwfl/dwfl_report_elf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 581f4079..58b06aea 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -276,7 +276,8 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, } else { - elf_end (elf); + elf_end (m->main.elf); + m->main.elf = elf; if (m->main_bias != bias || m->main.vaddr != vaddr || m->main.address_sync != address_sync) goto overlap; From patchwork Fri Nov 17 22:35:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksei Vetrov X-Patchwork-Id: 80190 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 858D03858438 for ; Fri, 17 Nov 2023 22:36:02 +0000 (GMT) X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by sourceware.org (Postfix) with ESMTPS id 0B6093858D32 for ; Fri, 17 Nov 2023 22:35:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0B6093858D32 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=flex--vvvvvv.bounces.google.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0B6093858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1149 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700260556; cv=none; b=HFpIk7RJUvin31vDR7yDIz4cClLgpa7LWU5oSYgzPj8VZ3ePPCCZbAtezBQa9OcojeY1whuXV7xeaJ/Ca+2Jn90iRSRMdNVldSQNR6iAbtfb8QPssNG2txWR1a7jbyQ8roVhGA4udjcnBiuewHXmMfYd5Z5hIvgy+NQaWJT4w30= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700260556; c=relaxed/simple; bh=LQpNzHBk5VBWPG+l/f/9ppaXetkidMruie9cVNCmK7k=; h=DKIM-Signature:Date:Mime-Version:Message-ID:Subject:From:To; b=DcOyzJqZTEC3y7IWZRXzmrafI330mKK+fsd+e6HDpsDWTi7uz729v7KZ85KFnaw0oqnFatC+64XtvnZbxVlAyAd5cZTrjVsrtXD5xQRhUV+S1NLzObwfbbbBvOJwmbwC29RM395N05Yx5MWwNi9iOX/Kc8QFDEyYCJQ+Ap0EMzY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5b31e000e97so38697447b3.1 for ; Fri, 17 Nov 2023 14:35:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1700260553; x=1700865353; darn=sourceware.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=t2hVK3PjKZ5b0AfP2A0pLSB8xT2WC+qSyhf8XuRbG98=; b=1NZMQ+FuhZ/HI9DpojwctaJh4VdwaeE7GxzSTZleXi1ouIK3ZZHmmIYVi7T+QcVbt6 q0cWyc8rza0T0PF2tVna7CeK6lG0qsQXsjk7VlelfiwkSlhRhMW8K+VDl/thjBg05bSH OD2T4ete0wbEQDngSwXCoCqe76W8AMy9cZ5kDY6ISWI31st8A+kGDZNutrVu+scuOc97 EBFo5K7qhVsIMRCxXQVNkExllcNl+qgg9Ncf9unQBlwFlLJ8Tphbx/ZTTZ2Hlc6xcg8H Rpo2BlZUZ0MfAjrADpcP1xHvwpnQ3xQq4MSlq+at3bt9sec81dm2dyc69Zd3tvwtF7BW quyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700260553; x=1700865353; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=t2hVK3PjKZ5b0AfP2A0pLSB8xT2WC+qSyhf8XuRbG98=; b=E2YgSPC2y3gDscsHjuV0QYGgZoaW8+GCarhDkA7CfhiT5AYYi7dPvxWcbuZpMY5PJw /LAdmyNpauwd6BvVxgtprKJhVJbEewE+LayScOx2ynCRvz9NHUMV9b/jZirz5YMofIU2 ilGyYo1vL1Fu+WdCfvXAVziWW8+UWoA2MAH3XsvmR0QgSxH+sm6mSYNLm7Uk8BGTr0vN 6m2xsoJtGjsOcPyFXTGXJ4Lie+2LKOCSERKdu7URE3U12H6I7H9K5DVJ7UOGbjXts4Td pAO8n25r6auuJ0PhkN13UUaN2l/2VpuQYM4yjRDlpjSyPZ2cL3MX8d2kdjiZUojVTStY 8qgQ== X-Gm-Message-State: AOJu0YwDUsQEScdrCUyr8faKT0v2vDBYq83q9Snv9ZR1Gs4SSz68eCE+ 3ODsPVmut9KHpZ6Vf8fhDOLRv31NbLT9lClEg/TR98a9vDoO5GLe/jQv3n+j4oL7EqibvlYmSsm R3sZoTnrHkpXpgguAHhE1H3hKUtreV2YktSUNV4L+BMhBZGSLrkQ+QNaPT2Z3Dw/gKNvY3Vg= X-Google-Smtp-Source: AGHT+IGRavH2+Y9FwCiKw0+T387nPmk74m7BF5JbZwZNB3kOPAZvVwRWx44AJPhGUXscAWvjPPsSv1ZptRU= X-Received: from vvvvvv-dev.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:472]) (user=vvvvvv job=sendgmr) by 2002:a0d:d8d4:0:b0:5be:a164:5669 with SMTP id a203-20020a0dd8d4000000b005bea1645669mr25226ywe.7.1700260553390; Fri, 17 Nov 2023 14:35:53 -0800 (PST) Date: Fri, 17 Nov 2023 22:35:41 +0000 In-Reply-To: <20231117223541.920797-1-vvvvvv@google.com> Mime-Version: 1.0 References: <20231117223541.920797-1-vvvvvv@google.com> X-Mailer: git-send-email 2.43.0.rc1.413.gea7ed67945-goog Message-ID: <20231117223541.920797-2-vvvvvv@google.com> Subject: [PATCH 2/2] tests: Add test for duplicate entries in archive From: vvvvvv@google.com To: elfutils-devel@sourceware.org Cc: kernel-team@android.com, maennich@google.com, vvvvvv@google.com X-Spam-Status: No, score=-19.3 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HK_RANDOM_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: elfutils-devel-bounces+patchwork=sourceware.org@sourceware.org From: Aleksei Vetrov Test dwfl-report-offline-memory against an archive that contains non-relocatable ELFs with the same name and contents. Signed-off-by: Aleksei Vetrov --- tests/run-dwfl-report-offline-memory.sh | 7 +++++++ tests/test-ar-duplicates.a.bz2 | Bin 0 -> 783 bytes 2 files changed, 7 insertions(+) create mode 100644 tests/test-ar-duplicates.a.bz2 diff --git a/tests/run-dwfl-report-offline-memory.sh b/tests/run-dwfl-report-offline-memory.sh index 644a45dc..85f43f53 100755 --- a/tests/run-dwfl-report-offline-memory.sh +++ b/tests/run-dwfl-report-offline-memory.sh @@ -20,7 +20,14 @@ testfiles testfile-dwfl-report-elf-align-shlib.so testfiles testarchive64.a +# echo "int _start(void) { return 0; }" > test.c +# gcc test.c -nostdlib -static -o test.o +# ar -r test-ar-duplicates.a test.o test.o test.o +# bzip2 -zf test-ar-duplicates.a +testfiles test-ar-duplicates.a + testrun ${abs_builddir}/dwfl-report-offline-memory ./testfile-dwfl-report-elf-align-shlib.so 1 testrun ${abs_builddir}/dwfl-report-offline-memory ./testarchive64.a 3 +testrun ${abs_builddir}/dwfl-report-offline-memory ./test-ar-duplicates.a 1 exit 0 diff --git a/tests/test-ar-duplicates.a.bz2 b/tests/test-ar-duplicates.a.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..e8168c6bb813bb05292372d6b856e2ca1163a835 GIT binary patch literal 783 zcmV+q1MvJpT4*^jL0KkKS*O-t`~U>U|NsC0^v!1T{dI5Uazg*-o^**RKmrI*1V9J? z0RUpbpefJ;J^%m!H~;_|001&HG5`Po00EJZ00u$8007Vc0g<7Q0000042*yPG7bO$ z27mwzjSPSQ0001FWB>t>Z~y=_003lYWB>pF00Sc+01Sb>Qb4DoG|(YN(+YV{O*J>F zZ891m=`tHrY3VgR0F2UlO|*o0s(PNL3ovPT-FWk=B;Jux%~F)fXQs4SQOt9gyiE>j zn6Ga(89!@GYHl-L-dxbs$}&@+(DyVdX=!IB!kuQ))6nI$Da(vh*7{bCREV6#KNqm! zdu&Mb+M`10By`;OIdVe?-cr&jN>kKstt5_(4hBpYI!%S0RYq!zoTdw-r};8m5SuEI zu&BS|S>97Ll_Ks%qWX~|eNFX2+)(wDko6K&h@AyU+*7EjB0KJbX(i2-NWr+XprTIu zB%S!mUnj<+n4}YmKId7>S^5_w!Fy?EWo4tTvdK6U;gV9C5?V$|i8mD;#XsVDVQ%g0=kvP>JW-B*XEa@sbQG}Le!OvXnKQ+tOr1|<*S=e&p2DS+rYDV*_vs1e6 zu1U>irf%B#9wjbP_72;9ds3ZsFn8O_*f5OUXClse^_%iUp6rvfsXM*Jq^>8z@U|Q6 z*J1OxE^e`H$%>n8wk=MZHxzfH?{*p^+fvGr{$BN;1J#puO|@+L>>t^ZP1xPOJkJDd zG&~LmIfeUCo0!>Vz3RBGUhvbk7`3dlX0%-$MeRv3e^oYHE+>J;`q?pM6W?@SQ#QEc ze~0GQ%}g2{wdp?SsT`$F_Z(%Ds5sw)!*Wg-`sD8<;cAYoXHLwT6*G9*M;hmeoNOvD zUXsh63|o(x!uDHDwwJQbnE~C literal 0 HcmV?d00001 -- 2.43.0.rc1.413.gea7ed67945-goog