]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
siphash24: fix memory alignment
authorDaniel Mack <daniel@zonque.org>
Mon, 16 Nov 2015 12:08:34 +0000 (13:08 +0100)
committerDaniel Mack <daniel@zonque.org>
Mon, 16 Nov 2015 14:19:23 +0000 (15:19 +0100)
Use unaligned_read_le64() to access input buffer when reading complete
64-bit words.

This should fix memory traps on platforms with strict aliasing.

src/basic/siphash24.c

index 3b61961389385b324b7f679af77f6c553a635203..1da2d1a4103549733049d273ee2902d672e3431d 100644 (file)
@@ -20,6 +20,7 @@
 #include "sparse-endian.h"
 
 #include "siphash24.h"
+#include "unaligned.h"
 #include "util.h"
 
 static inline uint64_t rotate_left(uint64_t x, uint8_t b) {
@@ -104,7 +105,7 @@ void siphash24_compress(const void *_in, size_t inlen, struct siphash *state) {
         end -= ( state->inlen % sizeof (uint64_t) );
 
         for ( ; in < end; in += 8 ) {
-                m = le64toh(*(le64_t*) in);
+                m = unaligned_read_le64(in);
 #ifdef DEBUG
                 printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0);
                 printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t) state->v1);