diff options
author | Daniel Mack <daniel@zonque.org> | 2015-11-16 13:08:34 +0100 |
---|---|---|
committer | Daniel Mack <daniel@zonque.org> | 2015-11-16 15:19:23 +0100 |
commit | 8dd85afe761885a9c47173cdafd1b7f9b36d08e6 (patch) | |
tree | 7e053044a8a8c9bdcc997200f736afe48998b1ad /src/basic/siphash24.c | |
parent | basic: add unaligned macros for little endian (diff) | |
download | systemd-8dd85afe761885a9c47173cdafd1b7f9b36d08e6.tar.xz systemd-8dd85afe761885a9c47173cdafd1b7f9b36d08e6.zip |
siphash24: fix memory alignment
Use unaligned_read_le64() to access input buffer when reading complete
64-bit words.
This should fix memory traps on platforms with strict aliasing.
Diffstat (limited to '')
-rw-r--r-- | src/basic/siphash24.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/basic/siphash24.c b/src/basic/siphash24.c index 3b61961389..1da2d1a410 100644 --- a/src/basic/siphash24.c +++ b/src/basic/siphash24.c @@ -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); |