summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/evp_cipher.c
diff options
context:
space:
mode:
authortb <>2024-03-02 09:55:30 +0000
committertb <>2024-03-02 09:55:30 +0000
commit9154e84667bc426874bac49d55743f07fd005bc2 (patch)
tree1a29aa5a7674f289db524ae2d0ca6b1ffb7043b3 /src/lib/libcrypto/evp/evp_cipher.c
parentd904a8f9d2ba21b2cd6d4e74ec8cd68927c5e6f9 (diff)
downloadopenbsd-9154e84667bc426874bac49d55743f07fd005bc2.tar.gz
openbsd-9154e84667bc426874bac49d55743f07fd005bc2.tar.bz2
openbsd-9154e84667bc426874bac49d55743f07fd005bc2.zip
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
Diffstat (limited to 'src/lib/libcrypto/evp/evp_cipher.c')
-rw-r--r--src/lib/libcrypto/evp/evp_cipher.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/lib/libcrypto/evp/evp_cipher.c b/src/lib/libcrypto/evp/evp_cipher.c
index c2a88a5591..48aaea0f1b 100644
--- a/src/lib/libcrypto/evp/evp_cipher.c
+++ b/src/lib/libcrypto/evp/evp_cipher.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: evp_cipher.c,v 1.20 2024/02/24 08:00:37 tb Exp $ */ 1/* $OpenBSD: evp_cipher.c,v 1.21 2024/03/02 09:55:30 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -613,15 +613,15 @@ EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx)
613} 613}
614 614
615void 615void
616EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx) 616EVP_CIPHER_CTX_legacy_clear(EVP_CIPHER_CTX *ctx)
617{ 617{
618 memset(ctx, 0, sizeof(*ctx)); 618 memset(ctx, 0, sizeof(*ctx));
619} 619}
620 620
621void 621int
622EVP_CIPHER_CTX_legacy_clear(EVP_CIPHER_CTX *ctx) 622EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx)
623{ 623{
624 memset(ctx, 0, sizeof(*ctx)); 624 return EVP_CIPHER_CTX_cleanup(ctx);
625} 625}
626 626
627int 627int