diff options
author | Alan Modra <amodra@gmail.com> | 2025-01-26 13:12:45 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2025-01-26 15:03:58 +1030 |
commit | 59ba00f21f7d48780e92a9fb66ed4abbedc3bd28 (patch) | |
tree | b955d694ca2f6ea52ce7264746b1c707a1782515 | |
parent | fd45211245d0f1027a0c3ab606e3253eda779e68 (diff) | |
download | gdb-59ba00f21f7d48780e92a9fb66ed4abbedc3bd28.zip gdb-59ba00f21f7d48780e92a9fb66ed4abbedc3bd28.tar.gz gdb-59ba00f21f7d48780e92a9fb66ed4abbedc3bd28.tar.bz2 |
loongson buffer overflow
bfd_elfNN_loongarch_set_data_segment_info can be called from the target
after_allocation function with a non-ELF hash table. This is seen in
the ld-elf pr21884 testcase. Fix the problem by first checking the
hash table type before writing to a loongarch_elf_hash_table field.
-rw-r--r-- | bfd/elfnn-loongarch.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c index efa5718..c24b260 100644 --- a/bfd/elfnn-loongarch.c +++ b/bfd/elfnn-loongarch.c @@ -5267,8 +5267,9 @@ void bfd_elfNN_loongarch_set_data_segment_info (struct bfd_link_info *info, int *data_segment_phase) { - struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info); - htab->data_segment_phase = data_segment_phase; + if (is_elf_hash_table (info->hash) + && elf_hash_table_id (elf_hash_table (info)) == LARCH_ELF_DATA) + loongarch_elf_hash_table (info)->data_segment_phase = data_segment_phase; } /* Implement R_LARCH_ALIGN by deleting excess alignment NOPs. |