Browse Source

Saw a mention somewhere a while back that the gotdata() function in

here could creates non-uniformity since very short fetches of 0 would
be excluded.  blocks of 0 are just as random as any other data, including
blocks of 4 4 4..  This is a misguided attempt to identify errors from the
entropy churn/gather code doesn't make sense, errors don't happen.
ok bcook
OPENBSD_6_5
deraadt 6 years ago
parent
commit
cc1a839b83
5 changed files with 27 additions and 144 deletions
  1. +5
    -28
      src/lib/libcrypto/arc4random/getentropy_aix.c
  2. +5
    -28
      src/lib/libcrypto/arc4random/getentropy_hpux.c
  3. +7
    -32
      src/lib/libcrypto/arc4random/getentropy_linux.c
  4. +5
    -28
      src/lib/libcrypto/arc4random/getentropy_osx.c
  5. +5
    -28
      src/lib/libcrypto/arc4random/getentropy_solaris.c

+ 5
- 28
src/lib/libcrypto/arc4random/getentropy_aix.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: getentropy_aix.c,v 1.5 2016/08/07 03:27:21 tb Exp $ */
/* $OpenBSD: getentropy_aix.c,v 1.6 2018/11/20 08:04:28 deraadt Exp $ */
/* /*
* Copyright (c) 2015 Michael Felt <aixtools@gmail.com> * Copyright (c) 2015 Michael Felt <aixtools@gmail.com>
@ -60,7 +60,6 @@
int getentropy(void *buf, size_t len); int getentropy(void *buf, size_t len);
static int gotdata(char *buf, size_t len);
static int getentropy_urandom(void *buf, size_t len, const char *path, static int getentropy_urandom(void *buf, size_t len, const char *path,
int devfscheck); int devfscheck);
static int getentropy_fallback(void *buf, size_t len); static int getentropy_fallback(void *buf, size_t len);
@ -118,22 +117,6 @@ getentropy(void *buf, size_t len)
return (ret); return (ret);
} }
/*
* Basic sanity checking; wish we could do better.
*/
static int
gotdata(char *buf, size_t len)
{
char any_set = 0;
size_t i;
for (i = 0; i < len; ++i)
any_set |= buf[i];
if (any_set == 0)
return (-1);
return (0);
}
static int static int
getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck) getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck)
{ {
@ -179,10 +162,8 @@ start:
i += ret; i += ret;
} }
close(fd); close(fd);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = save_errno;
return (0); /* satisfied */
nodevrandom: nodevrandom:
errno = EIO; errno = EIO;
return (-1); return (-1);
@ -416,10 +397,6 @@ getentropy_fallback(void *buf, size_t len)
} }
explicit_bzero(&ctx, sizeof ctx); explicit_bzero(&ctx, sizeof ctx);
explicit_bzero(results, sizeof results); explicit_bzero(results, sizeof results);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = EIO;
return (-1);
errno = save_errno;
return (0); /* satisfied */
} }

+ 5
- 28
src/lib/libcrypto/arc4random/getentropy_hpux.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: getentropy_hpux.c,v 1.5 2016/08/07 03:27:21 tb Exp $ */
/* $OpenBSD: getentropy_hpux.c,v 1.6 2018/11/20 08:04:28 deraadt Exp $ */
/* /*
* Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
@ -64,7 +64,6 @@
int getentropy(void *buf, size_t len); int getentropy(void *buf, size_t len);
static int gotdata(char *buf, size_t len);
static int getentropy_urandom(void *buf, size_t len, const char *path, static int getentropy_urandom(void *buf, size_t len, const char *path,
int devfscheck); int devfscheck);
static int getentropy_fallback(void *buf, size_t len); static int getentropy_fallback(void *buf, size_t len);
@ -122,22 +121,6 @@ getentropy(void *buf, size_t len)
return (ret); return (ret);
} }
/*
* Basic sanity checking; wish we could do better.
*/
static int
gotdata(char *buf, size_t len)
{
char any_set = 0;
size_t i;
for (i = 0; i < len; ++i)
any_set |= buf[i];
if (any_set == 0)
return (-1);
return (0);
}
static int static int
getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck) getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck)
{ {
@ -183,10 +166,8 @@ start:
i += ret; i += ret;
} }
close(fd); close(fd);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = save_errno;
return (0); /* satisfied */
nodevrandom: nodevrandom:
errno = EIO; errno = EIO;
return (-1); return (-1);
@ -410,10 +391,6 @@ getentropy_fallback(void *buf, size_t len)
} }
explicit_bzero(&ctx, sizeof ctx); explicit_bzero(&ctx, sizeof ctx);
explicit_bzero(results, sizeof results); explicit_bzero(results, sizeof results);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = EIO;
return (-1);
errno = save_errno;
return (0); /* satisfied */
} }

+ 7
- 32
src/lib/libcrypto/arc4random/getentropy_linux.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: getentropy_linux.c,v 1.45 2018/03/13 22:53:28 bcook Exp $ */
/* $OpenBSD: getentropy_linux.c,v 1.46 2018/11/20 08:04:28 deraadt Exp $ */
/* /*
* Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
@ -73,7 +73,6 @@
int getentropy(void *buf, size_t len); int getentropy(void *buf, size_t len);
static int gotdata(char *buf, size_t len);
#if defined(SYS_getrandom) && defined(GRND_NONBLOCK) #if defined(SYS_getrandom) && defined(GRND_NONBLOCK)
static int getentropy_getrandom(void *buf, size_t len); static int getentropy_getrandom(void *buf, size_t len);
#endif #endif
@ -177,22 +176,6 @@ getentropy(void *buf, size_t len)
return (ret); return (ret);
} }
/*
* Basic sanity checking; wish we could do better.
*/
static int
gotdata(char *buf, size_t len)
{
char any_set = 0;
size_t i;
for (i = 0; i < len; ++i)
any_set |= buf[i];
if (any_set == 0)
return (-1);
return (0);
}
#if defined(SYS_getrandom) && defined(GRND_NONBLOCK) #if defined(SYS_getrandom) && defined(GRND_NONBLOCK)
static int static int
getentropy_getrandom(void *buf, size_t len) getentropy_getrandom(void *buf, size_t len)
@ -261,10 +244,8 @@ start:
i += ret; i += ret;
} }
close(fd); close(fd);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = save_errno;
return (0); /* satisfied */
nodevrandom: nodevrandom:
errno = EIO; errno = EIO;
return (-1); return (-1);
@ -292,10 +273,8 @@ getentropy_sysctl(void *buf, size_t len)
goto sysctlfailed; goto sysctlfailed;
i += chunk; i += chunk;
} }
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = save_errno;
return (0); /* satisfied */
sysctlfailed: sysctlfailed:
errno = EIO; errno = EIO;
return (-1); return (-1);
@ -541,10 +520,6 @@ getentropy_fallback(void *buf, size_t len)
} }
explicit_bzero(&ctx, sizeof ctx); explicit_bzero(&ctx, sizeof ctx);
explicit_bzero(results, sizeof results); explicit_bzero(results, sizeof results);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = EIO;
return (-1);
errno = save_errno;
return (0); /* satisfied */
} }

+ 5
- 28
src/lib/libcrypto/arc4random/getentropy_osx.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: getentropy_osx.c,v 1.11 2016/09/03 15:24:09 bcook Exp $ */
/* $OpenBSD: getentropy_osx.c,v 1.12 2018/11/20 08:04:28 deraadt Exp $ */
/* /*
* Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
@ -82,7 +82,6 @@
int getentropy(void *buf, size_t len); int getentropy(void *buf, size_t len);
static int gotdata(char *buf, size_t len);
static int getentropy_urandom(void *buf, size_t len); static int getentropy_urandom(void *buf, size_t len);
static int getentropy_fallback(void *buf, size_t len); static int getentropy_fallback(void *buf, size_t len);
@ -142,22 +141,6 @@ getentropy(void *buf, size_t len)
return (ret); return (ret);
} }
/*
* Basic sanity checking; wish we could do better.
*/
static int
gotdata(char *buf, size_t len)
{
char any_set = 0;
size_t i;
for (i = 0; i < len; ++i)
any_set |= buf[i];
if (any_set == 0)
return (-1);
return (0);
}
static int static int
getentropy_urandom(void *buf, size_t len) getentropy_urandom(void *buf, size_t len)
{ {
@ -203,10 +186,8 @@ start:
i += ret; i += ret;
} }
close(fd); close(fd);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = save_errno;
return (0); /* satisfied */
nodevrandom: nodevrandom:
errno = EIO; errno = EIO;
return (-1); return (-1);
@ -431,10 +412,6 @@ getentropy_fallback(void *buf, size_t len)
} }
explicit_bzero(&ctx, sizeof ctx); explicit_bzero(&ctx, sizeof ctx);
explicit_bzero(results, sizeof results); explicit_bzero(results, sizeof results);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = EIO;
return (-1);
errno = save_errno;
return (0); /* satisfied */
} }

+ 5
- 28
src/lib/libcrypto/arc4random/getentropy_solaris.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: getentropy_solaris.c,v 1.12 2016/08/07 03:27:21 tb Exp $ */
/* $OpenBSD: getentropy_solaris.c,v 1.13 2018/11/20 08:04:28 deraadt Exp $ */
/* /*
* Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
@ -68,7 +68,6 @@
int getentropy(void *buf, size_t len); int getentropy(void *buf, size_t len);
static int gotdata(char *buf, size_t len);
static int getentropy_urandom(void *buf, size_t len, const char *path, static int getentropy_urandom(void *buf, size_t len, const char *path,
int devfscheck); int devfscheck);
static int getentropy_fallback(void *buf, size_t len); static int getentropy_fallback(void *buf, size_t len);
@ -148,22 +147,6 @@ getentropy(void *buf, size_t len)
return (ret); return (ret);
} }
/*
* Basic sanity checking; wish we could do better.
*/
static int
gotdata(char *buf, size_t len)
{
char any_set = 0;
size_t i;
for (i = 0; i < len; ++i)
any_set |= buf[i];
if (any_set == 0)
return (-1);
return (0);
}
static int static int
getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck) getentropy_urandom(void *buf, size_t len, const char *path, int devfscheck)
{ {
@ -210,10 +193,8 @@ start:
i += ret; i += ret;
} }
close(fd); close(fd);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = save_errno;
return (0); /* satisfied */
nodevrandom: nodevrandom:
errno = EIO; errno = EIO;
return (-1); return (-1);
@ -436,10 +417,6 @@ getentropy_fallback(void *buf, size_t len)
} }
explicit_bzero(&ctx, sizeof ctx); explicit_bzero(&ctx, sizeof ctx);
explicit_bzero(results, sizeof results); explicit_bzero(results, sizeof results);
if (gotdata(buf, len) == 0) {
errno = save_errno;
return (0); /* satisfied */
}
errno = EIO;
return (-1);
errno = save_errno;
return (0); /* satisfied */
} }

Loading…
Cancel
Save