• D
    drbg: ensure fork-safety without using a pthread_atfork handler · 1b0fe00e
    Dr. Matthias St. Pierre 提交于
    When the new OpenSSL CSPRNG was introduced in version 1.1.1,
    it was announced in the release notes that it would be fork-safe,
    which the old CSPRNG hadn't been.
    
    The fork-safety was implemented using a fork count, which was
    incremented by a pthread_atfork handler. Initially, this handler
    was enabled by default. Unfortunately, the default behaviour
    had to be changed for other reasons in commit b5319bdb, so
    the new OpenSSL CSPRNG failed to keep its promise.
    
    This commit restores the fork-safety using a different approach.
    It replaces the fork count by a fork id, which coincides with
    the process id on UNIX-like operating systems and is zero on other
    operating systems. It is used to detect when an automatic reseed
    after a fork is necessary.
    
    To prevent a future regression, it also adds a test to verify that
    the child reseeds after fork.
    
    CVE-2019-1549
    Reviewed-by: NPaul Dale <paul.dale@oracle.com>
    Reviewed-by: NMatt Caswell <matt@openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/9802)
    1b0fe00e
init.c 24.5 KB