summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-10-29 10:31:01 +1030
committerAlan Modra <amodra@gmail.com>2022-10-29 15:23:47 +1030
commit13de66dd346c4a4eddf62c3b97747d707c5ed78e (patch)
treec21e5dbdabb78e4d1a027cf28b78a0d1a3ac7d6c
parent0ce50fc900a53f32ed09c49ddc8cf26b517b33d1 (diff)
downloadbinutils-gdb-13de66dd346c4a4eddf62c3b97747d707c5ed78e.tar.gz
NULL dereference read in som_write_object_contents
objcopy copy_object may omit the call to bfd_copy_private_bfd_data for various conditions deemed non-fatal, in which case obj_som_exec_data will be NULL for the output file. * som.c (som_finish_writing): Don't dereference NULL obj_som_exec_data.
-rw-r--r--bfd/som.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/bfd/som.c b/bfd/som.c
index b3a72e36ede..7a5ee35f0e2 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -4211,7 +4211,7 @@ som_finish_writing (bfd *abfd)
/* Setting of the system_id has to happen very late now that copying of
BFD private data happens *after* section contents are set. */
- if (abfd->flags & (EXEC_P | DYNAMIC))
+ if ((abfd->flags & (EXEC_P | DYNAMIC)) && obj_som_exec_data (abfd))
obj_som_file_hdr (abfd)->system_id = obj_som_exec_data (abfd)->system_id;
else if (bfd_get_mach (abfd) == pa20)
obj_som_file_hdr (abfd)->system_id = CPU_PA_RISC2_0;
@@ -4242,7 +4242,8 @@ som_finish_writing (bfd *abfd)
exec_header = obj_som_exec_hdr (abfd);
exec_header->exec_entry = bfd_get_start_address (abfd);
- exec_header->exec_flags = obj_som_exec_data (abfd)->exec_flags;
+ if (obj_som_exec_data (abfd))
+ exec_header->exec_flags = obj_som_exec_data (abfd)->exec_flags;
/* Oh joys. Ram some of the BSS data into the DATA section
to be compatible with how the hp linker makes objects