aboutsummaryrefslogtreecommitdiff
path: root/src/os.cpp
diff options
context:
space:
mode:
authorTimon Kruiper <timonkruiper@gmail.com>2020-03-31 20:15:09 +0200
committerAndrew Kelley <andrew@ziglang.org>2020-03-31 15:26:06 -0400
commit9e019ed26bf2ab46040099dadaf778dec436bc4a (patch)
tree97fbc7f93c0ddb91e84eeba4fad0fb81f6077ada /src/os.cpp
parentc7a37967340da7e21281fca09e82f8fffb3f15d8 (diff)
downloadzig-9e019ed26bf2ab46040099dadaf778dec436bc4a.tar.gz
zig-9e019ed26bf2ab46040099dadaf778dec436bc4a.zip
Fix possible unaligned ptr from `getauxval`
This caused SIGILL on armv7a-linux
Diffstat (limited to 'src/os.cpp')
-rw-r--r--src/os.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/os.cpp b/src/os.cpp
index a1deb0f611..505063f827 100644
--- a/src/os.cpp
+++ b/src/os.cpp
@@ -1456,7 +1456,10 @@ static void init_rand() {
memcpy(&seed, bytes, sizeof(unsigned));
srand(seed);
#elif defined(ZIG_OS_LINUX)
- srand(*((unsigned*)getauxval(AT_RANDOM)));
+ unsigned char *ptr_random = (unsigned char*)getauxval(AT_RANDOM);
+ unsigned seed;
+ memcpy(&seed, ptr_random, sizeof(seed));
+ srand(seed);
#else
int fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC);
if (fd == -1) {