diff -ru openssl-1.0.2a/crypto/rand/md_rand.c openssl-1.0.2a-patched/crypto/rand/md_rand.c
--- openssl-1.0.2a/crypto/rand/md_rand.c	2015-03-19 14:19:00.000000000 +0100
+++ openssl-1.0.2a-patched/crypto/rand/md_rand.c	2015-04-08 00:49:09.000000000 +0200
@@ -266,7 +266,13 @@
         j = (num - i);
         j = (j > MD_DIGEST_LENGTH) ? MD_DIGEST_LENGTH : j;
 
-        MD_Init(&m);
+        if (!MD_Init(&m)) {
+          RANDerr(RAND_F_SSLEAY_RAND_ADD, RAND_R_MD_INIT_FAILED);
+          ERR_add_error_data(1, "Call to MD_Init() failed in function ssleay_rand_add() which returned without doing what you meant to.");
+          EVP_MD_CTX_cleanup(&m);
+          return;
+        }
+        
         MD_Update(&m, local_md, MD_DIGEST_LENGTH);
         k = (st_idx + j) - STATE_SIZE;
         if (k > 0) {
@@ -469,7 +475,13 @@
         /* num_ceil -= MD_DIGEST_LENGTH/2 */
         j = (num >= MD_DIGEST_LENGTH / 2) ? MD_DIGEST_LENGTH / 2 : num;
         num -= j;
-        MD_Init(&m);
+
+        if (!MD_Init(&m)) {
+          RANDerr(RAND_F_SSLEAY_RAND_BYTES, RAND_R_MD_INIT_FAILED);
+          EVP_MD_CTX_cleanup(&m);
+          return (0);
+        }
+        
 #ifndef GETPID_IS_MEANINGLESS
         if (curr_pid) {         /* just in the first iteration to save time */
             MD_Update(&m, (unsigned char *)&curr_pid, sizeof curr_pid);
@@ -508,7 +520,12 @@
         }
     }
 
-    MD_Init(&m);
+    if (!MD_Init(&m)) {
+      RANDerr(RAND_F_SSLEAY_RAND_BYTES, RAND_R_MD_INIT_FAILED);
+      EVP_MD_CTX_cleanup(&m);
+      return (0);
+    }
+    
     MD_Update(&m, (unsigned char *)&(md_c[0]), sizeof(md_c));
     MD_Update(&m, local_md, MD_DIGEST_LENGTH);
     if (lock)
