From ff69a8949bb65c9eb64ea03ee1492902c2620c8c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 27 Feb 2020 13:50:21 +1030 Subject: bfd_stat_arch_elt buffer overflow If you manage to put an xcoff object file into a non-xcoff archive (created by first putting a non-xcoff object file into it), and have xcoff support compiled into libbfd, then objdump -x on the archive can segfault. The problem is that _bfd_xcoff_stat_arch_elt expects abfd->arelt_data->arch_header to be one of the xcoff variants, but arelt_data is generated depending on the archive format, *not* the element format. * bfd.c (bfd_stat_arch_elt): Use vector of containing archive, if file is an archive element. * bfd-in2.h: Regenerate. --- bfd/bfd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'bfd/bfd.c') diff --git a/bfd/bfd.c b/bfd/bfd.c index 463f94b..1c1238c 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -2063,7 +2063,8 @@ DESCRIPTION . BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) . .#define bfd_stat_arch_elt(abfd, stat) \ -. BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) +. BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \ +. _bfd_stat_arch_elt, (abfd, stat)) . .#define bfd_update_armap_timestamp(abfd) \ . BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) -- cgit v1.1