a912db
From 87a2eac7a8264a0e8d64a8db85d44ec22454e256 Mon Sep 17 00:00:00 2001
a912db
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
a912db
Date: Wed, 7 Sep 2022 13:46:31 +0200
a912db
Subject: [PATCH 1/3] Add ENGINE_init and ENGINE_finish calls
a912db
a912db
According to manual page of ENGINE_init, it should be called explicitly
a912db
before any key operations happens. Make it active whole lifetime.
a912db
---
a912db
 lib/dns/openssl_link.c | 9 ++++++++-
a912db
 1 file changed, 8 insertions(+), 1 deletion(-)
a912db
a912db
diff --git a/lib/dns/openssl_link.c b/lib/dns/openssl_link.c
a912db
index 333f34cb37..a3f63885fa 100644
a912db
--- a/lib/dns/openssl_link.c
a912db
+++ b/lib/dns/openssl_link.c
a912db
@@ -85,14 +85,20 @@ dst__openssl_init(const char *engine) {
a912db
 			result = DST_R_NOENGINE;
a912db
 			goto cleanup_rm;
a912db
 		}
a912db
+		if (!ENGINE_init(e)) {
a912db
+			result = DST_R_NOENGINE;
a912db
+			goto cleanup_rm;
a912db
+		}
a912db
 		/* This will init the engine. */
a912db
 		if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
a912db
 			result = DST_R_NOENGINE;
a912db
-			goto cleanup_rm;
a912db
+			goto cleanup_init;
a912db
 		}
a912db
 	}
a912db
 
a912db
 	return (ISC_R_SUCCESS);
a912db
+cleanup_init:
a912db
+	ENGINE_finish(e);
a912db
 cleanup_rm:
a912db
 	if (e != NULL) {
a912db
 		ENGINE_free(e);
a912db
@@ -108,6 +114,7 @@ void
a912db
 dst__openssl_destroy(void) {
a912db
 #if !defined(OPENSSL_NO_ENGINE) && OPENSSL_API_LEVEL < 30000
a912db
 	if (e != NULL) {
a912db
+		ENGINE_finish(e);
a912db
 		ENGINE_free(e);
a912db
 	}
a912db
 	e = NULL;
a912db
-- 
a912db
2.37.2
a912db