Fix signature and semantics of EVP_{CIPHER,MD}_CTX_init()
authortb <tb@openbsd.org>
Sat, 2 Mar 2024 09:55:30 +0000 (09:55 +0000)
committertb <tb@openbsd.org>
Sat, 2 Mar 2024 09:55:30 +0000 (09:55 +0000)
commitb3f182804dbeecc2a6ac8c39608929c24a5e0d24
treebcc7c91aedf605ee4f445c9298359248d92fbdc2
parentf09dc5a53a2a4eb27804566c124a7e72e995c274
Fix signature and semantics of EVP_{CIPHER,MD}_CTX_init()

When the EVP_CIPHER_CTX and the EVP_MD_CTX were still expected to live
on the stack, these initialization APIs were wrappers around memset.
In OpenSSL 1.1, somebody removed them and carelessly made _init() an
alias of _reset() aka _cleanup(). As a consequence, both signature and
semantics changed.

Unsurprisingly, there is now code out there that actually uses the new
semantics, which causes leaks on LibreSSL and older OpenSSL. This aligns
our _init() with OpenSSL 1.1 semantics.

ok jsing
lib/libcrypto/evp/evp.h
lib/libcrypto/evp/evp_cipher.c
lib/libcrypto/evp/evp_digest.c