PR26452, ASAN: som_compute_checksum som.c:4293
authorAlan Modra <amodra@gmail.com>
Tue, 25 Aug 2020 06:16:02 +0000 (15:46 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 25 Aug 2020 13:37:10 +0000 (23:07 +0930)
PR 26452
* som.c (som_compute_checksum): XOR 32-bit words in header,
not unsigned long sized words.

bfd/ChangeLog
bfd/som.c

index 4fc95529ab319927d8b65cedf314851e78408dd2..38920f3a10018328879085c16fdecd13d2d6de12 100644 (file)
@@ -1,3 +1,9 @@
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+       PR 26452
+       * som.c (som_compute_checksum): XOR 32-bit words in header,
+       not unsigned long sized words.
+
 2020-08-25  Alan Modra  <amodra@gmail.com>
 
        PR 26430
index 887d9b187ef88b2b9d255f4243d3bf1cb4995325..4f0a606c18a342f64af6428c033b636cacf47bda 100644 (file)
--- 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);