Port from 0.9.8-stable
authorLutz Jänicke <jaenicke@openssl.org>
Mon, 24 Sep 2007 11:01:18 +0000 (11:01 +0000)
committerLutz Jänicke <jaenicke@openssl.org>
Mon, 24 Sep 2007 11:01:18 +0000 (11:01 +0000)
FAQ
crypto/rand/rand_lib.c
doc/crypto/RAND_bytes.pod

diff --git a/FAQ b/FAQ
index 1a66b18359d0dfe98f9f79bf36c3f2ec492d0078..49db5d49ccae3df5d467eb91aca631e7704eaf1e 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -67,6 +67,7 @@ OpenSSL  -  Frequently Asked Questions
 * Why doesn't my server application receive a client certificate?
 * Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
 * I think I've detected a memory leak, is this a bug?
+* Why does Valgrind complain about the use of uninitialized data?
 * Why doesn't a memory BIO work when a file does?
 
 ===============================================================================
@@ -917,6 +918,16 @@ thread-safe):
   ERR_free_strings(), EVP_cleanup() and CRYPTO_cleanup_all_ex_data().
 
 
+* Why does Valgrind complain about the use of uninitialized data?
+
+When OpenSSL's PRNG routines are called to generate random numbers the supplied
+buffer contents are mixed into the entropy pool: so it technically does not
+matter whether the buffer is initialized at this point or not.  Valgrind (and
+other test tools) will complain about this. When using Valgrind, make sure the
+OpenSSL library has been compiled with the PURIFY macro defined (-DPURIFY)
+to get rid of these warnings.
+
+
 * Why doesn't a memory BIO work when a file does?
 
 This can occur in several cases for example reading an S/MIME email message.
index adfec83b7bd88ff3ebe4f62edc18b9ff3076862a..513e3389859e9f4a504cbd0796d1df3b88315cd7 100644 (file)
@@ -154,7 +154,6 @@ void RAND_add(const void *buf, int num, double entropy)
 int RAND_bytes(unsigned char *buf, int num)
        {
        const RAND_METHOD *meth = RAND_get_rand_method();
-       memset(buf, 0, num);
        if (meth && meth->bytes)
                return meth->bytes(buf,num);
        return(-1);
@@ -163,7 +162,6 @@ int RAND_bytes(unsigned char *buf, int num)
 int RAND_pseudo_bytes(unsigned char *buf, int num)
        {
        const RAND_METHOD *meth = RAND_get_rand_method();
-       memset(buf, 0, num);
        if (meth && meth->pseudorand)
                return meth->pseudorand(buf,num);
        return(-1);
index ce6329ce54afe2a9ffe95b15d3448864b8b5a636..1a9b91e28144222419516b99392b3222c50d865b 100644 (file)
@@ -25,6 +25,9 @@ unpredictable. They can be used for non-cryptographic purposes and for
 certain purposes in cryptographic protocols, but usually not for key
 generation etc.
 
+The contents of B<buf> is mixed into the entropy pool before retrieving
+the new pseudo-random bytes unless disabled at compile time (see FAQ).
+
 =head1 RETURN VALUES
 
 RAND_bytes() returns 1 on success, 0 otherwise. The error code can be