openssl/crypto
Dr. Matthias St. Pierre 8cfc19716c rand_unix.c: open random devices on first use only
Commit c7504aeb64 (pr #6432) fixed a regression for applications in
chroot environments, which compensated the fact that the new OpenSSL CSPRNG
(based on the NIST DRBG) now reseeds periodically, which the previous
one didn't. Now the reseeding could fail in the chroot environment if the
DEVRANDOM devices were not present anymore and no other entropy source
(e.g. getrandom()) was available.

The solution was to keep the file handles for the DEVRANDOM devices open
by default. In fact, the fix did more than this, it opened the DEVRANDOM
devices early and unconditionally in rand_pool_init(), which had the
unwanted side effect that the devices were opened (and kept open) even
in cases when they were not used at all, for example when the getrandom()
system call was available. Due  to a bug (issue #7419) this even happened
when the feature was disabled by the application.

This commit removes the unconditional opening of all DEVRANDOM devices.
They will now only be opened (and kept open) on first use. In particular,
if getrandom() is available, the handles will not be opened unnecessarily.

This change does not introduce a regression for applications compiled for
libcrypto 1.1.0, because the SSLEAY RNG also seeds on first use. So in the
above constellation the CSPRNG will only be properly seeded if it is happens
before the forking and chrooting.

Fixes #7419

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7437)
2018-11-08 16:38:26 +01:00
..
aes Update copyright year 2018-09-11 13:45:17 +01:00
aria
asn1 ASN.1 DER: Make INT32 / INT64 types read badly encoded LONG zeroes 2018-09-09 03:39:37 +02:00
async arch/async_posix.h: improve portability. 2018-10-19 10:29:21 +02:00
bf
bio Fix the BIO callback return code handling 2018-10-04 14:16:16 +01:00
blake2
bn Fix MSVC warning C4819 2018-10-30 04:51:36 +01:00
buffer
camellia Update copyright year 2018-09-11 13:45:17 +01:00
cast
chacha
cmac Adapt other EVP code to use EVP_MAC instead of direct implementation calls 2018-10-30 05:34:50 +01:00
cms Update copyright year 2018-09-11 13:45:17 +01:00
comp
conf Use secure_getenv(3) when available. 2018-09-24 11:21:18 +10:00
ct Use secure_getenv(3) when available. 2018-09-24 11:21:18 +10:00
des
dh Harmonize the error handling codepath 2018-09-05 15:22:35 +03:00
dsa Add a constant time flag to one of the bignums to avoid a timing leak. 2018-11-02 08:10:07 +10:00
dso
ec Timing vulnerability in ECDSA signature generation (CVE-2018-0735) 2018-10-29 07:47:22 +10:00
engine crypto/engine/eng_devcrypto.c: ensure we don't leak resources 2018-11-02 20:21:59 +01:00
err Fix a collision in function err numbers 2018-11-05 23:08:34 +08:00
evp Add poly1305 MAC support 2018-11-05 13:07:07 +08:00
gmac GMAC implementation 2018-11-05 08:09:41 +10:00
hmac EVP_MAC: Integrate HMAC EVP_PKEY_METHOD into generic MAC EVP_PKEY_METHOD 2018-10-30 05:50:58 +01:00
idea
include/internal Add poly1305 MAC support 2018-11-05 13:07:07 +08:00
kdf Reset the HKDF state between operations 2018-10-29 14:06:54 +00:00
lhash Update copyright year 2018-09-11 13:45:17 +01:00
md2
md4
md5
mdc2
modes Update copyright year 2018-09-11 13:45:17 +01:00
objects GMAC implementation 2018-11-05 08:09:41 +10:00
ocsp Update copyright year 2018-09-11 13:45:17 +01:00
pem key zeroisation for pvkfmt now done on all branch paths 2018-09-05 05:14:02 +10:00
perlasm Update copyright year 2018-09-11 13:45:17 +01:00
pkcs7 Update copyright year 2018-09-11 13:45:17 +01:00
pkcs12 Use secure_getenv(3) when available. 2018-09-24 11:21:18 +10:00
poly1305 Add poly1305 MAC support 2018-11-05 13:07:07 +08:00
rand rand_unix.c: open random devices on first use only 2018-11-08 16:38:26 +01:00
rc2
rc4 Update copyright year 2018-09-11 13:45:17 +01:00
rc5
ripemd
rsa RSA security bits calculation 2018-10-23 08:01:48 +10:00
seed Update copyright year 2018-09-11 13:45:17 +01:00
sha sha/asm/keccak1600-armv8.pl: halve the size of hw-assisted subroutine. 2018-10-19 10:43:02 +02:00
siphash EVP_MAC: Integrate SipHash EVP_PKEY_METHOD into generic MAC EVP_PKEY_METHOD 2018-10-30 08:09:07 +01:00
sm2 EVP module documentation pass 2018-10-17 13:22:14 +03:00
sm3
sm4
srp
stack
store
ts
txt_db
ui crypto/ui/ui_openssl.c: make sure to recognise ENXIO and EIO too 2018-09-20 06:39:07 +02:00
whrlpool
x509 Apply self-imposed path length also to root CAs 2018-10-18 00:07:56 -04:00
x509v3 Support GeneralSubtrees with minimum = 0 2018-10-27 12:11:41 +08:00
alphacpuid.pl
arm64cpuid.pl
arm_arch.h
armcap.c
armv4cpuid.pl
build.info GMAC: Add subdir info in crypto/build.info for this to build 2018-11-05 17:09:04 +01:00
c64xpluscpuid.pl
cpt_err.c
cryptlib.c minor fixes for Windows 2018-09-12 09:16:07 +02:00
ctype.c
cversion.c
dllmain.c Update copyright year 2018-09-11 13:45:17 +01:00
ebcdic.c
ex_data.c
getenv.c Use secure_getenv(3) when available. 2018-09-24 11:21:18 +10:00
ia64cpuid.S
init.c Add automatic initializations support for EVP_MAC objects 2018-10-29 13:35:19 +01:00
LPdir_nyi.c
LPdir_unix.c typo-fixes: miscellaneous typo fixes 2018-09-21 23:55:22 +02:00
LPdir_vms.c
LPdir_win32.c
LPdir_win.c
LPdir_wince.c
mem_clr.c
mem_dbg.c
mem_sec.c test/secmemtest: test secure memory only if it is implemented 2018-10-05 12:19:48 +02:00
mem.c
mips_arch.h
o_dir.c
o_fips.c
o_fopen.c Add missing include file. 2018-09-17 10:40:32 +10:00
o_init.c
o_str.c
o_time.c
pariscid.pl
ppc_arch.h
ppccap.c
ppccpuid.pl
s390x_arch.h s390x assembly pack: add OPENSSL_s390xcap environment variable. 2018-10-17 14:02:34 +02:00
s390xcap.c s390x assembly pack: add OPENSSL_s390xcap environment variable. 2018-10-17 14:02:34 +02:00
s390xcpuid.pl s390x assembly pack: add OPENSSL_s390xcap environment variable. 2018-10-17 14:02:34 +02:00
sparc_arch.h
sparccpuid.S
sparcv9cap.c
threads_none.c
threads_pthread.c
threads_win.c
uid.c Update copyright year 2018-09-11 13:45:17 +01:00
vms_rms.h
x86_64cpuid.pl
x86cpuid.pl