RAND_load_file(): return error if reseeding failed
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Sat, 20 Oct 2018 14:53:57 +0000 (16:53 +0200)
committerDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Fri, 26 Oct 2018 06:50:26 +0000 (08:50 +0200)
The failure of RAND_load_file was only noticed because of the
heap corruption which was reported in #7499 and fixed in commit
5b4cb385c18a. To prevent this in the future, RAND_load_file()
now explicitly checks RAND_status() and reports an error if it
fails.

Related-to: #7449
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7456)

crypto/rand/randfile.c

index 89720eb5cf6bb16267b1d5b5920ad91faa7512c3..028c1281c0ed947ba4168342c7d2bd1ce705c220 100644 (file)
@@ -148,6 +148,12 @@ int RAND_load_file(const char *file, long bytes)
 
     OPENSSL_cleanse(buf, sizeof(buf));
     fclose(in);
 
     OPENSSL_cleanse(buf, sizeof(buf));
     fclose(in);
+    if (!RAND_status()) {
+        RANDerr(RAND_F_RAND_LOAD_FILE, RAND_R_RESEED_ERROR);
+        ERR_add_error_data(2, "Filename=", file);
+        return -1;
+    }
+
     return ret;
 }
 
     return ret;
 }