summaryrefslogtreecommitdiffstats
path: root/engines
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2024-01-28 23:50:16 +0100
committerMatt Caswell <matt@openssl.org>2024-01-31 10:31:35 +0000
commit48c2dc449211812922f6b0521494b0a436a43117 (patch)
tree6d2035b42b519ae9b27d7dbbdfbcdd4a944a9442 /engines
parent88df4cf8801be3f9b54e318c418edee8de1ad1a8 (diff)
Fix a possible memleak in bind_afalg
bind_afalg calls afalg_aes_cbc which allocates cipher_handle->_hidden global object(s) but if one of them fails due to out of memory, the function bind_afalg relies on the engine destroy method to be called. But that does not happen because the dynamic engine object is not destroyed in the usual way in dynamic_load in this case: If the bind_engine function fails, there will be no further calls into the shared object. See ./crypto/engine/eng_dyn.c near the comment: /* Copy the original ENGINE structure back */ Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/23409) (cherry picked from commit 729a1496cc4cda669dea6501c991113c78f04560)
Diffstat (limited to 'engines')
-rw-r--r--engines/e_afalg.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/engines/e_afalg.c b/engines/e_afalg.c
index c0189951e6..06f9b11633 100644
--- a/engines/e_afalg.c
+++ b/engines/e_afalg.c
@@ -834,8 +834,10 @@ static int bind_helper(ENGINE *e, const char *id)
if (!afalg_chk_platform())
return 0;
- if (!bind_afalg(e))
+ if (!bind_afalg(e)) {
+ afalg_destroy(e);
return 0;
+ }
return 1;
}