From 131470685fd71a69592944e415f19673dee97a93 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Mon, 3 Jun 2002 16:43:57 +0000 Subject: [PATCH] /dev/urandom re-read(2) loop --- libraries/liblutil/entropy.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libraries/liblutil/entropy.c b/libraries/liblutil/entropy.c index cd379c6724..74d3f3210a 100644 --- a/libraries/liblutil/entropy.c +++ b/libraries/liblutil/entropy.c @@ -36,21 +36,27 @@ int lutil_entropy( unsigned char *buf, ber_len_t nbytes ) if( nbytes == 0 ) return 0; #ifdef URANDOM_DEVICE +#define URANDOM_NREADS 4 /* Linux and *BSD offer a urandom device */ { - int rc, fd; + int rc, fd, n=0; fd = open( URANDOM_DEVICE, O_RDONLY ); if( fd < 0 ) return -1; - rc = read( fd, buf, nbytes ); - close(fd); + do { + rc = read( fd, buf, nbytes ); + if( rc <= 0 ) break; - /* should return nbytes */ - if( rc != nbytes ) return -1; + buf+=rc; + nbytes-=rc; - return 0; + if( ++n >= URANDOM_NREADS ) break; + } while( nbytes > 0 ); + + close(fd); + return nbytes > 0 ? -1 : 0; } #elif PROV_RSA_FULL { -- 2.39.5