diff options
Diffstat (limited to 'src/lib/libcrypto/crypto/getentropy_solaris.c')
-rw-r--r-- | src/lib/libcrypto/crypto/getentropy_solaris.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/lib/libcrypto/crypto/getentropy_solaris.c b/src/lib/libcrypto/crypto/getentropy_solaris.c index 83cc30aac2..cfd5b70475 100644 --- a/src/lib/libcrypto/crypto/getentropy_solaris.c +++ b/src/lib/libcrypto/crypto/getentropy_solaris.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: getentropy_solaris.c,v 1.3 2014/07/12 14:46:31 deraadt Exp $ */ | 1 | /* $OpenBSD: getentropy_solaris.c,v 1.4 2014/07/12 20:41:47 wouter Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> | 4 | * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> |
@@ -60,6 +60,7 @@ | |||
60 | 60 | ||
61 | #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) | 61 | #define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l))) |
62 | #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) | 62 | #define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x))) |
63 | #define HF(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (void*))) | ||
63 | 64 | ||
64 | int getentropy(void *buf, size_t len); | 65 | int getentropy(void *buf, size_t len); |
65 | 66 | ||
@@ -194,7 +195,7 @@ start: | |||
194 | } | 195 | } |
195 | for (i = 0; i < len; ) { | 196 | for (i = 0; i < len; ) { |
196 | size_t wanted = len - i; | 197 | size_t wanted = len - i; |
197 | ssize_t ret = read(fd, buf + i, wanted); | 198 | ssize_t ret = read(fd, (char *)buf + i, wanted); |
198 | 199 | ||
199 | if (ret == -1) { | 200 | if (ret == -1) { |
200 | if (errno == EAGAIN || errno == EINTR) | 201 | if (errno == EAGAIN || errno == EINTR) |
@@ -243,7 +244,7 @@ static int | |||
243 | getentropy_fallback(void *buf, size_t len) | 244 | getentropy_fallback(void *buf, size_t len) |
244 | { | 245 | { |
245 | uint8_t results[SHA512_DIGEST_LENGTH]; | 246 | uint8_t results[SHA512_DIGEST_LENGTH]; |
246 | int save_errno = errno, e, m, pgs = getpagesize(), faster = 0, repeat; | 247 | int save_errno = errno, e, pgs = getpagesize(), faster = 0, repeat; |
247 | static int cnt; | 248 | static int cnt; |
248 | struct timespec ts; | 249 | struct timespec ts; |
249 | struct timeval tv; | 250 | struct timeval tv; |
@@ -254,7 +255,7 @@ getentropy_fallback(void *buf, size_t len) | |||
254 | SHA512_CTX ctx; | 255 | SHA512_CTX ctx; |
255 | static pid_t lastpid; | 256 | static pid_t lastpid; |
256 | pid_t pid; | 257 | pid_t pid; |
257 | size_t i, ii; | 258 | size_t i, ii, m; |
258 | char *p; | 259 | char *p; |
259 | 260 | ||
260 | pid = getpid(); | 261 | pid = getpid(); |
@@ -283,7 +284,7 @@ getentropy_fallback(void *buf, size_t len) | |||
283 | HX((pid = getsid(pid)) == -1, pid); | 284 | HX((pid = getsid(pid)) == -1, pid); |
284 | HX((pid = getppid()) == -1, pid); | 285 | HX((pid = getppid()) == -1, pid); |
285 | HX((pid = getpgid(0)) == -1, pid); | 286 | HX((pid = getpgid(0)) == -1, pid); |
286 | HX((m = getpriority(0, 0)) == -1, m); | 287 | HX((e = getpriority(0, 0)) == -1, e); |
287 | HX((getloadavg(loadavg, 3) == -1), loadavg); | 288 | HX((getloadavg(loadavg, 3) == -1), loadavg); |
288 | 289 | ||
289 | if (!faster) { | 290 | if (!faster) { |
@@ -296,9 +297,9 @@ getentropy_fallback(void *buf, size_t len) | |||
296 | HX(sigprocmask(SIG_BLOCK, NULL, &sigset) == -1, | 297 | HX(sigprocmask(SIG_BLOCK, NULL, &sigset) == -1, |
297 | sigset); | 298 | sigset); |
298 | 299 | ||
299 | HD(main); /* an addr in program */ | 300 | HF(main); /* an addr in program */ |
300 | HD(getentropy); /* an addr in this library */ | 301 | HF(getentropy); /* an addr in this library */ |
301 | HD(printf); /* an addr in libc */ | 302 | HF(printf); /* an addr in libc */ |
302 | p = (char *)&p; | 303 | p = (char *)&p; |
303 | HD(p); /* an addr on stack */ | 304 | HD(p); /* an addr on stack */ |
304 | p = (char *)&errno; | 305 | p = (char *)&errno; |
@@ -416,7 +417,7 @@ getentropy_fallback(void *buf, size_t len) | |||
416 | HD(cnt); | 417 | HD(cnt); |
417 | } | 418 | } |
418 | SHA512_Final(results, &ctx); | 419 | SHA512_Final(results, &ctx); |
419 | memcpy(buf + i, results, min(sizeof(results), len - i)); | 420 | memcpy((char *)buf + i, results, min(sizeof(results), len - i)); |
420 | i += min(sizeof(results), len - i); | 421 | i += min(sizeof(results), len - i); |
421 | } | 422 | } |
422 | memset(results, 0, sizeof results); | 423 | memset(results, 0, sizeof results); |