Fuzzed files in archives
authorAlan Modra <amodra@gmail.com>
Thu, 27 Oct 2022 05:31:17 +0000 (16:01 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 27 Oct 2022 07:26:51 +0000 (17:56 +1030)
Given a fuzzed object file in an archive with section size exceeding
file size, objcopy will report an error like "section size (0xfeffffff
bytes) is larger than file size (0x17a bytes)" but will create a copy
of the object laid out for the large section.  That means a large
temporary file on disk that is read back and written to the output
archive, which can take a while.  The output archive is then deleted
due to the error.  Avoid some of this silliness.

* objcopy.c (copy_section): If section contents cannot be read
set output section size to zero.

binutils/objcopy.c

index 6ffbdf9c68177c0b09a6f158311185aa1bbf8a58..d20aaef9f4f2e2a910bd7bf666dab6e3c158fc1b 100644 (file)
@@ -4418,6 +4418,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
          || !bfd_convert_section_contents (ibfd, isection, obfd,
                                            &memhunk, &size))
        {
+         bfd_set_section_size (osection, 0);
          status = 1;
          bfd_nonfatal_message (NULL, ibfd, isection, NULL);
          free (memhunk);