aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-05-17 21:58:09 +0200
committerMattias Andrée <m@maandree.se>2026-05-17 21:58:09 +0200
commit09d245907c9018c606b84bed5d72e91d9ab88377 (patch)
tree91d72b72cdd9c4ed6004279757e4f79f9c9d937d
parentUpdate year (diff)
downloadlibar2simplified-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.mk10
-rw-r--r--libar2simplified_decode_r.c15
2 files changed, 13 insertions, 12 deletions
diff --git a/config.mk b/config.mk
index 5445241..310da09 100644
--- a/config.mk
+++ b/config.mk
@@ -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);