From 2186273ac4ba9fa4c56dc8c5d47ab3a7e358cec9 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 25 Aug 2020 15:46:02 +0930 Subject: [PATCH] PR26452, ASAN: som_compute_checksum som.c:4293 PR 26452 * som.c (som_compute_checksum): XOR 32-bit words in header, not unsigned long sized words. --- bfd/ChangeLog | 6 ++++++ bfd/som.c | 11 ++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4fc95529ab3..38920f3a100 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2020-08-25 Alan Modra + + PR 26452 + * som.c (som_compute_checksum): XOR 32-bit words in header, + not unsigned long sized words. + 2020-08-25 Alan Modra PR 26430 diff --git a/bfd/som.c b/bfd/som.c index 887d9b187ef..4f0a606c18a 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -37,7 +37,7 @@ static bfd_boolean som_mkobject (bfd *); static bfd_boolean som_is_space (asection *); static bfd_boolean som_is_subspace (asection *); static int compare_subspaces (const void *, const void *); -static unsigned long som_compute_checksum (struct som_external_header *); +static uint32_t som_compute_checksum (struct som_external_header *); static bfd_boolean som_build_and_write_symbol_table (bfd *); static unsigned int som_slurp_symbol_table (bfd *); @@ -4281,14 +4281,15 @@ som_finish_writing (bfd *abfd) /* Compute and return the checksum for a SOM file header. */ -static unsigned long +static uint32_t som_compute_checksum (struct som_external_header *hdr) { - unsigned long checksum, count, i; - unsigned long *buffer = (unsigned long *) hdr; + size_t count, i; + uint32_t checksum; + uint32_t *buffer = (uint32_t *) hdr; checksum = 0; - count = sizeof (struct som_external_header) / 4; + count = sizeof (*hdr) / sizeof (*buffer); for (i = 0; i < count; i++) checksum ^= *(buffer + i); -- 2.30.2