• B
    Code to thread-safety in ChangeCipherState · 44bad9cb
    Benjamin Kaduk 提交于
    The server-side ChangeCipherState processing stores the new cipher
    in the SSL_SESSION object, so that the new state can be used if
    this session gets resumed.  However, writing to the session is only
    thread-safe for initial handshakes, as at other times the session
    object may be in a shared cache and in use by another thread at the
    same time.  Reflect this invariant in the code by only writing to
    s->session->cipher when it is currently NULL (we do not cache sessions
    with no cipher).  The code prior to this change would never actually
    change the (non-NULL) cipher value in a session object, since our
    server enforces that (pre-TLS-1.3) resumptions use the exact same
    cipher as the initial connection, and non-abbreviated renegotiations
    have produced a new session object before we get to this point.
    Regardless, include logic to detect such a condition and abort the
    handshake if it occurs, to avoid any risk of inadvertently using
    the wrong cipher on a connection.
    Reviewed-by: NTomas Mraz <tmraz@fedoraproject.org>
    (Merged from https://github.com/openssl/openssl/pull/10943)
    
    (cherry picked from commit 2e3ec2e1578977fca830a47fd7f521e290540e6d)
    44bad9cb
openssl.txt 147.7 KB