From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1039) id 1DF1C3858C32; Fri, 5 Apr 2024 01:53:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1DF1C3858C32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1712282008; bh=4e78PT42VNBApzj9SIxvZOlQuBrfRsy1tEHBV5FiLrc=; h=From:To:Subject:Date:From; b=JnyuHkvdL0Q3nmXzwXNzRsxRP+Cl0/HN3zXL5p/+k0axEsB3HlXG7XY7aBes2cQWQ zr0jp4oMH2Plcw9/liMxuaa318DNjIgxL9vHdufb4qCH66gnEUEHrwjp0FdLQyCEQ3 IrC15OD68psWFtlAsBR0NzjwCwHWk4g/rlgkZSfc= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: H.J. Lu To: binutils-cvs@sourceware.org Subject: [binutils-gdb] bfd: Munmap readonly memory after bfd_free_cached_info X-Act-Checkin: binutils-gdb X-Git-Author: H.J. Lu X-Git-Refname: refs/heads/master X-Git-Oldrev: c069de3491879faeef77af40262b47c3d4c5ce7b X-Git-Newrev: 37eac4810b66f165ed5bb837ac36c0eb9baba727 Message-Id: <20240405015328.1DF1C3858C32@sourceware.org> Date: Fri, 5 Apr 2024 01:53:28 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D37eac4810b66= f165ed5bb837ac36c0eb9baba727 commit 37eac4810b66f165ed5bb837ac36c0eb9baba727 Author: H.J. Lu Date: Thu Apr 4 18:05:57 2024 -0700 bfd: Munmap readonly memory after bfd_free_cached_info =20 Munmap readonly memory after bfd_free_cached_info which may use munmapp= ed readonly memory. =20 PR ld/31608 * opncls.c (_bfd_delete_bfd): Munmap readonly memory after bfd_free_cached_info. Diff: --- bfd/opncls.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/bfd/opncls.c b/bfd/opncls.c index 5efec37175e..2f8a3a6c919 100644 --- a/bfd/opncls.c +++ b/bfd/opncls.c @@ -172,16 +172,6 @@ _bfd_delete_bfd (bfd *abfd) munmap (elf_section_data (sec)->contents_addr, elf_section_data (sec)->contents_size); } - - struct bfd_mmapped *mmapped, *next; - for (mmapped =3D abfd->mmapped; mmapped !=3D NULL; mmapped =3D next) - { - struct bfd_mmapped_entry *entries =3D mmapped->entries; - next =3D mmapped->next; - for (unsigned int i =3D 0; i < mmapped->next_entry; i++) - munmap (entries[i].addr, entries[i].size); - munmap (mmapped, _bfd_pagesize); - } #endif =20 /* Give the target _bfd_free_cached_info a chance to free memory. */ @@ -197,6 +187,18 @@ _bfd_delete_bfd (bfd *abfd) else free ((char *) bfd_get_filename (abfd)); =20 +#ifdef USE_MMAP + struct bfd_mmapped *mmapped, *next; + for (mmapped =3D abfd->mmapped; mmapped !=3D NULL; mmapped =3D next) + { + struct bfd_mmapped_entry *entries =3D mmapped->entries; + next =3D mmapped->next; + for (unsigned int i =3D 0; i < mmapped->next_entry; i++) + munmap (entries[i].addr, entries[i].size); + munmap (mmapped, _bfd_pagesize); + } +#endif + free (abfd->arelt_data); free (abfd); }