[PATCH 33744] Check if a section has non-zero linked_to before using it
Zheng Bao
fishbaoz@hotmail.com
Sat Jan 10 06:54:03 GMT 2026
https://sourceware.org/bugzilla/show_bug.cgi?id=33744
gas:bfd: Check if a section has non-zero linked_to before using it
The symbol in the section header should be assigned at
building stage. So it should be section like ".data".
The section where the symbol is defined should have output
section. But it is not enough. The common section has output
section which will not be written into any target section.
If the symbol is in common section, the linked_to is pointer
NULL and a segmentation fault comes up.
Test suite:
.section __patchable_funrtion_entries,"awo",%progbits,foo
.dc.a .LPFE1
.comm foo,8
The changes in _bfd_elf_copy_special_section_fields is a similar
change. It also need to check before using it.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33744
Signed-off-by: Zheng Bao <fishbaoz@hotmail.com>
diff --git a/bfd/elf.c b/bfd/elf.c
index 8b6dd3ce370..41d550205ae 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4322,7 +4322,8 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
s = kept;
}
/* Handle objcopy. */
- else if (s->output_section == NULL)
+ else if (s->output_section == NULL
+ || elf_section_data(s->output_section) == NULL)
{
_bfd_error_handler
/* xgettext:c-format */
@@ -13831,7 +13832,8 @@ _bfd_elf_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
if (isection == NULL
|| isection->bfd_section == NULL
- || isection->bfd_section->output_section == NULL)
+ || isection->bfd_section->output_section == NULL
+ || elf_section_data(isection->bfd_section->output_section) == NULL)
{
_bfd_error_handler
/* xgettext:c-format */
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index 579c1df2dc3..fb082e4c0c5 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -2508,6 +2508,8 @@ set_additional_section_info (bfd *abfd,
sec->map_head.linked_to_symbol_name,
bfd_section_name (sec));
else
+ /* TODO: If the symbol is defined in common section, it can not
+ * be initialized at linking stage. */
elf_linked_to_section (sec) = S_GET_SEGMENT (linked_to_sym);
}
Not sure if posting to bugzilla is enough. So I also send to the maillist.
Please review.
Zheng
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20260110/77e41cbe/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bug_33744.patch
Type: application/octet-stream
Size: 2332 bytes
Desc: bug_33744.patch
URL: <https://sourceware.org/pipermail/binutils/attachments/20260110/77e41cbe/attachment.obj>
More information about the Binutils
mailing list