diff options
author | tb <> | 2024-03-02 09:55:30 +0000 |
---|---|---|
committer | tb <> | 2024-03-02 09:55:30 +0000 |
commit | 9154e84667bc426874bac49d55743f07fd005bc2 (patch) | |
tree | 1a29aa5a7674f289db524ae2d0ca6b1ffb7043b3 /src/lib/libcrypto/evp/evp_cipher.c | |
parent | d904a8f9d2ba21b2cd6d4e74ec8cd68927c5e6f9 (diff) | |
download | openbsd-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.c | 10 |
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 | ||
615 | void | 615 | void |
616 | EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx) | 616 | EVP_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 | ||
621 | void | 621 | int |
622 | EVP_CIPHER_CTX_legacy_clear(EVP_CIPHER_CTX *ctx) | 622 | EVP_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 | ||
627 | int | 627 | int |