aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-01-26 13:12:45 +1030
committerAlan Modra <amodra@gmail.com>2025-01-26 15:03:58 +1030
commit59ba00f21f7d48780e92a9fb66ed4abbedc3bd28 (patch)
treeb955d694ca2f6ea52ce7264746b1c707a1782515
parentfd45211245d0f1027a0c3ab606e3253eda779e68 (diff)
downloadgdb-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.c5
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.