diff options
| author | Mattias Andrée <m@maandree.se> | 2026-05-17 21:58:09 +0200 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-05-17 21:58:09 +0200 |
| commit | 09d245907c9018c606b84bed5d72e91d9ab88377 (patch) | |
| tree | 91d72b72cdd9c4ed6004279757e4f79f9c9d937d | |
| parent | Update year (diff) | |
| download | libar2simplified-09d245907c9018c606b84bed5d72e91d9ab88377.tar.gz libar2simplified-09d245907c9018c606b84bed5d72e91d9ab88377.tar.bz2 libar2simplified-09d245907c9018c606b84bed5d72e91d9ab88377.tar.xz | |
Fix memory alignment bug
Signed-off-by: Mattias Andrée <m@maandree.se>
| -rw-r--r-- | config.mk | 10 | ||||
| -rw-r--r-- | libar2simplified_decode_r.c | 15 |
2 files changed, 13 insertions, 12 deletions
@@ -3,6 +3,12 @@ MANPREFIX = $(PREFIX)/share/man CC = cc +COMMON_SANITIZE = -fsanitize=alignment,shift,signed-integer-overflow,object-size,null,undefined,bounds,address +CLANG_SANITIZE = -O1 $(COMMON_SANITIZE),cfi -flto -fvisibility=hidden -fno-sanitize-trap=cfi +GCC_SANITIZE = -O1 $(COMMON_SANITIZE) +#SANITIZE = $(CLANG_SANITIZE) +#SANITIZE = $(GCC_SANITIZE) + CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE -CFLAGS = -std=c11 -Wall -g -pthread -LDFLAGS = -lar2 -lblake -pthread +CFLAGS = $(SANITIZE) -std=c11 -Wall -g -pthread +LDFLAGS = $(SANITIZE) -lar2 -lblake -pthread diff --git a/libar2simplified_decode_r.c b/libar2simplified_decode_r.c index 545ecde..fa37aac 100644 --- a/libar2simplified_decode_r.c +++ b/libar2simplified_decode_r.c @@ -47,7 +47,8 @@ random_salt(char *out, size_t n, int (*random_byte_generator)(char *out, size_t ssize_t r; # ifdef AT_RANDOM uintptr_t raddr_; - uint16_t *raddr; + const unsigned char *raddr; + size_t j; # endif #endif @@ -70,15 +71,9 @@ random_salt(char *out, size_t n, int (*random_byte_generator)(char *out, size_t #if defined(__linux__) && defined(AT_RANDOM) raddr_ = (uintptr_t)getauxval(AT_RANDOM); if (raddr_) { - raddr = (void *)raddr_; - seed ^= (unsigned)raddr[0]; - seed ^= (unsigned)raddr[1]; - seed ^= (unsigned)raddr[2]; - seed ^= (unsigned)raddr[3]; - seed ^= (unsigned)raddr[4]; - seed ^= (unsigned)raddr[5]; - seed ^= (unsigned)raddr[6]; - seed ^= (unsigned)raddr[7]; + raddr = (const void *)raddr_; + for (j = 0; j < 16; j++) + ((unsigned char *)&seed)[j % sizeof(seed)] ^= raddr[j]; } #endif srand(seed); |
