diff options
author | simon <simon@FreeBSD.org> | 2010-02-28 18:49:43 +0000 |
---|---|---|
committer | simon <simon@FreeBSD.org> | 2010-02-28 18:49:43 +0000 |
commit | cdb6eef1f013e22a10ab5f5829dcdc3b5e32d385 (patch) | |
tree | 21770f10e7f26d05fc9b0fa96a7b6d7b107552c5 /crypto/rand/randfile.c | |
parent | 3bc8c7595d6f805f614ed860868465e3c1d3ee2b (diff) | |
download | FreeBSD-src-cdb6eef1f013e22a10ab5f5829dcdc3b5e32d385.zip FreeBSD-src-cdb6eef1f013e22a10ab5f5829dcdc3b5e32d385.tar.gz |
Import OpenSSL 0.9.8m.
Diffstat (limited to 'crypto/rand/randfile.c')
-rw-r--r-- | crypto/rand/randfile.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/crypto/rand/randfile.c b/crypto/rand/randfile.c index d108353..84276d7 100644 --- a/crypto/rand/randfile.c +++ b/crypto/rand/randfile.c @@ -117,6 +117,15 @@ int RAND_load_file(const char *file, long bytes) if (file == NULL) return(0); +#ifdef PURIFY + /* struct stat can have padding and unused fields that may not be + * initialized in the call to stat(). We need to clear the entire + * structure before calling RAND_add() to avoid complaints from + * applications such as Valgrind. + */ + memset(&sb, 0, sizeof(sb)); +#endif + if (stat(file,&sb) < 0) return(0); RAND_add(&sb,sizeof(sb),0.0); if (bytes == 0) return(ret); @@ -127,8 +136,8 @@ int RAND_load_file(const char *file, long bytes) in=fopen(file,"rb"); #endif if (in == NULL) goto err; -#if defined(S_IFBLK) && defined(S_IFCHR) - if (sb.st_mode & (S_IFBLK | S_IFCHR)) { +#if defined(S_ISBLK) && defined(S_ISCHR) + if (S_ISBLK(sb.st_mode) || S_ISCHR(sb.st_mode)) { /* this file is a device. we don't want read an infinite number * of bytes from a random device, nor do we want to use buffered * I/O because we will waste system entropy. @@ -174,8 +183,8 @@ int RAND_write_file(const char *file) i=stat(file,&sb); if (i != -1) { -#if defined(S_IFBLK) && defined(S_IFCHR) - if (sb.st_mode & (S_IFBLK | S_IFCHR)) { +#if defined(S_ISBLK) && defined(S_ISCHR) + if (S_ISBLK(sb.st_mode) || S_ISCHR(sb.st_mode)) { /* this file is a device. we don't write back to it. * we "succeed" on the assumption this is some sort * of random device. Otherwise attempting to write to |