summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorderaadt <>2014-07-08 08:33:43 +0000
committerderaadt <>2014-07-08 08:33:43 +0000
commit797b1803e50d563fc36daa7a32d7fac6551c1019 (patch)
tree21b434c02ee99010eeab100210273539b1ab340c /src
parentc80cb8a59eea6e7961fa8b2da1fa30572b67aa18 (diff)
downloadopenbsd-797b1803e50d563fc36daa7a32d7fac6551c1019.tar.gz
openbsd-797b1803e50d563fc36daa7a32d7fac6551c1019.tar.bz2
openbsd-797b1803e50d563fc36daa7a32d7fac6551c1019.zip
repeat calls to getentrypy() with the same pid likely indicate reseeds.
Since we assume the PRNG above is doing "something old, something new" folding, shortcut and do fewer repeats through the timing loop. ok beck
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/arc4random/getentropy_linux.c13
-rw-r--r--src/lib/libcrypto/crypto/getentropy_linux.c13
2 files changed, 20 insertions, 6 deletions
diff --git a/src/lib/libcrypto/arc4random/getentropy_linux.c b/src/lib/libcrypto/arc4random/getentropy_linux.c
index 78d0d786a6..a7f5991201 100644
--- a/src/lib/libcrypto/arc4random/getentropy_linux.c
+++ b/src/lib/libcrypto/arc4random/getentropy_linux.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: getentropy_linux.c,v 1.14 2014/06/26 13:48:11 deraadt Exp $ */ 1/* $OpenBSD: getentropy_linux.c,v 1.15 2014/07/08 08:33:43 deraadt 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>
@@ -288,7 +288,7 @@ static int
288getentropy_fallback(void *buf, size_t len) 288getentropy_fallback(void *buf, size_t len)
289{ 289{
290 uint8_t results[SHA512_DIGEST_LENGTH]; 290 uint8_t results[SHA512_DIGEST_LENGTH];
291 int save_errno = errno, e, m, pgs = getpagesize(), repeat; 291 int save_errno = errno, e, m, pgs = getpagesize(), repeat = 0;
292 static int cnt; 292 static int cnt;
293 struct timespec ts; 293 struct timespec ts;
294 struct timeval tv; 294 struct timeval tv;
@@ -296,13 +296,20 @@ getentropy_fallback(void *buf, size_t len)
296 sigset_t sigset; 296 sigset_t sigset;
297 struct stat st; 297 struct stat st;
298 SHA512_CTX ctx; 298 SHA512_CTX ctx;
299 static pid_t lastpid;
299 pid_t pid; 300 pid_t pid;
300 size_t i, ii; 301 size_t i, ii;
301 char *p; 302 char *p;
302 303
304 pid = getpid();
305 if (lastpid == getpid())
306 repeat = REPEAT - 1;
307 else
308 lastpid = pid;
309
303 for (i = 0; i < len; ) { 310 for (i = 0; i < len; ) {
304 SHA512_Init(&ctx); 311 SHA512_Init(&ctx);
305 for (repeat = 0; repeat < REPEAT; repeat++) { 312 for (; repeat < REPEAT; repeat++) {
306 313
307 HX((e = gettimeofday(&tv, NULL)) == -1, tv); 314 HX((e = gettimeofday(&tv, NULL)) == -1, tv);
308 if (e != -1) { 315 if (e != -1) {
diff --git a/src/lib/libcrypto/crypto/getentropy_linux.c b/src/lib/libcrypto/crypto/getentropy_linux.c
index 78d0d786a6..a7f5991201 100644
--- a/src/lib/libcrypto/crypto/getentropy_linux.c
+++ b/src/lib/libcrypto/crypto/getentropy_linux.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: getentropy_linux.c,v 1.14 2014/06/26 13:48:11 deraadt Exp $ */ 1/* $OpenBSD: getentropy_linux.c,v 1.15 2014/07/08 08:33:43 deraadt 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>
@@ -288,7 +288,7 @@ static int
288getentropy_fallback(void *buf, size_t len) 288getentropy_fallback(void *buf, size_t len)
289{ 289{
290 uint8_t results[SHA512_DIGEST_LENGTH]; 290 uint8_t results[SHA512_DIGEST_LENGTH];
291 int save_errno = errno, e, m, pgs = getpagesize(), repeat; 291 int save_errno = errno, e, m, pgs = getpagesize(), repeat = 0;
292 static int cnt; 292 static int cnt;
293 struct timespec ts; 293 struct timespec ts;
294 struct timeval tv; 294 struct timeval tv;
@@ -296,13 +296,20 @@ getentropy_fallback(void *buf, size_t len)
296 sigset_t sigset; 296 sigset_t sigset;
297 struct stat st; 297 struct stat st;
298 SHA512_CTX ctx; 298 SHA512_CTX ctx;
299 static pid_t lastpid;
299 pid_t pid; 300 pid_t pid;
300 size_t i, ii; 301 size_t i, ii;
301 char *p; 302 char *p;
302 303
304 pid = getpid();
305 if (lastpid == getpid())
306 repeat = REPEAT - 1;
307 else
308 lastpid = pid;
309
303 for (i = 0; i < len; ) { 310 for (i = 0; i < len; ) {
304 SHA512_Init(&ctx); 311 SHA512_Init(&ctx);
305 for (repeat = 0; repeat < REPEAT; repeat++) { 312 for (; repeat < REPEAT; repeat++) {
306 313
307 HX((e = gettimeofday(&tv, NULL)) == -1, tv); 314 HX((e = gettimeofday(&tv, NULL)) == -1, tv);
308 if (e != -1) { 315 if (e != -1) {