From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id E01A83857B98; Thu, 9 Nov 2023 14:59:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E01A83857B98 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Szabolcs Nagy To: bfd-cvs@sourceware.org Subject: [binutils-gdb] bfd: aarch64: Fix leaks in case of BTI stub reuse X-Act-Checkin: binutils-gdb X-Git-Author: Szabolcs Nagy X-Git-Refname: refs/heads/master X-Git-Oldrev: d3a8dfdef0797244d0f2f3a8ec5db8f1dcf1337b X-Git-Newrev: a74ac8c41971682f687a8a5ce94f36a8054ecd0e Message-Id: <20231109145934.E01A83857B98@sourceware.org> Date: Thu, 9 Nov 2023 14:59:34 +0000 (GMT) X-BeenThere: binutils-cvs@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Nov 2023 14:59:35 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3Da74ac8c41971= 682f687a8a5ce94f36a8054ecd0e commit a74ac8c41971682f687a8a5ce94f36a8054ecd0e Author: Szabolcs Nagy Date: Tue Oct 17 14:13:00 2023 +0100 bfd: aarch64: Fix leaks in case of BTI stub reuse =20 BTI stub parameters were recomputed even if those were already set up. This is unnecessary work and leaks the symbol name that is allocated for the stub. Diff: --- bfd/elfnn-aarch64.c | 56 ++++++++++++++++++++++++++++++-------------------= ---- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 798643ade7c..3adece30250 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -4665,33 +4665,41 @@ _bfd_aarch64_add_call_stub_entries (bool *stub_chan= ged, bfd *output_bfd, stub_entry_bti =3D aarch64_stub_hash_lookup (&htab->stub_hash_table, stub_name_bti, false, false); - if (stub_entry_bti =3D=3D NULL) - stub_entry_bti =3D - _bfd_aarch64_add_stub_entry_in_group (stub_name_bti, - sym_sec, htab); - if (stub_entry_bti =3D=3D NULL) + if (stub_entry_bti !=3D NULL) + BFD_ASSERT (stub_entry_bti->stub_type + =3D=3D aarch64_stub_bti_direct_branch); + else { - free (stub_name); - free (stub_name_bti); - goto error_ret_free_internal; - } - - stub_entry_bti->target_value =3D sym_value + irela->r_addend; - stub_entry_bti->target_section =3D sym_sec; - stub_entry_bti->stub_type =3D aarch64_stub_bti_direct_branch; - stub_entry_bti->h =3D hash; - stub_entry_bti->st_type =3D st_type; + stub_entry_bti =3D + _bfd_aarch64_add_stub_entry_in_group (stub_name_bti, + sym_sec, htab); + if (stub_entry_bti =3D=3D NULL) + { + free (stub_name); + free (stub_name_bti); + goto error_ret_free_internal; + } =20 - len =3D sizeof (BTI_STUB_ENTRY_NAME) + strlen (sym_name); - stub_entry_bti->output_name =3D bfd_alloc (htab->stub_bfd, len); - if (stub_entry_bti->output_name =3D=3D NULL) - { - free (stub_name); - free (stub_name_bti); - goto error_ret_free_internal; + stub_entry_bti->target_value =3D + sym_value + irela->r_addend; + stub_entry_bti->target_section =3D sym_sec; + stub_entry_bti->stub_type =3D + aarch64_stub_bti_direct_branch; + stub_entry_bti->h =3D hash; + stub_entry_bti->st_type =3D st_type; + + len =3D sizeof (BTI_STUB_ENTRY_NAME) + strlen (sym_name); + stub_entry_bti->output_name =3D bfd_alloc (htab->stub_bfd, + len); + if (stub_entry_bti->output_name =3D=3D NULL) + { + free (stub_name); + free (stub_name_bti); + goto error_ret_free_internal; + } + snprintf (stub_entry_bti->output_name, len, + BTI_STUB_ENTRY_NAME, sym_name); } - snprintf (stub_entry_bti->output_name, len, - BTI_STUB_ENTRY_NAME, sym_name); =20 /* Update the indirect call stub to target the BTI stub. */ stub_entry->target_value =3D 0;