)]}'
{
  "commit": "c2cb1bfb901e781e5c9dd42f32193c99da3d8d73",
  "tree": "cde3c1e27b2eb8ef931bce11b8cd1c201d17918e",
  "parents": [
    "42b413786de8e8e9ba2d8b1bf8319582efcfa613"
  ],
  "author": {
    "name": "Alan Modra",
    "email": "amodra@gmail.com",
    "time": "Wed Jan 14 22:28:44 2026 +0000"
  },
  "committer": {
    "name": "Maciej W. Rozycki",
    "email": "macro@orcam.me.uk",
    "time": "Wed Jan 14 22:28:44 2026 +0000"
  },
  "message": "Move mips_hi16_list to mips_elf_section_data\n\nThis patch is in response to fuzzing testcases that manage to cause\nsegfaults due to stale references to freed memory via mips_hi16.data.\n\nA number of the error/warning handlers in ldmain.c use %C.  This can\ncause debug info to be parsed for the first time in order to print\nfile/function/line.  If one of those warnings is triggered after some\nhi16 relocs have been processed but before the matching lo16 reloc is\nhandled, *and* the debug info is corrupted with a lo16 reloc, then the\nmips_hi16_list will be flushed with the result that printing a warning\nchanges linker output.  It is also possible that corrupted debug info\nadds to the hi16 list, with the result that when the linker handles a\nlater lo16 reloc in a text section, ld will segfault accessing\nmips_hi16.data after the debug buffers have be freed.  Both of these\nproblems are fixed by keeping a per-section mips_hi16_list rather than\na per-file list.\n\n\t* elfxx-mips.c (struct mips_hi16): Move earlier, deleting\n\tinput_section field.\n\t(struct _mips_elf_section_data): Add mips_hi16_list.\n\t(struct mips_elf_obj_tdata): Delete mips_hi16_list.\n\t(_bfd_mips_elf_free_cached_info): Adjust to suit new location\n\tof mips_hi16_list.\n\t(_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_lo16_reloc): Likewise.\n\t(_bfd_mips_elf_orphan_shr16_reloc): Likewise.\n\t(mips_elf_free_hi16_list): Likewise.\n\t(_bfd_mips_elf_finalize_section_relocs): Likewise.\n\t(_bfd_elf_mips_get_relocated_section_contents): Likewise.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8ac3e1f6c23dea47a0604b296254040bdea4f750",
      "old_mode": 33188,
      "old_path": "bfd/elfxx-mips.c",
      "new_id": "97e6e65d5f1e448f882578919f9d74a8c44480fd",
      "new_mode": 33188,
      "new_path": "bfd/elfxx-mips.c"
    }
  ]
}
