X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fengine%2Feng_devcrypto.c;h=4a0ba09a38bec178f58eabbece9ff96b15827ce7;hp=a15dc95a6e40a42b15e3d4fa73ae4c41299d19d1;hb=681e8cacdbdc44ac00af29b6656fc52745a9baa2;hpb=458c7dad9e3f59490fb0908c1a27ca39e4cf38dd;ds=sidebyside diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c index a15dc95a6e..4a0ba09a38 100644 --- a/crypto/engine/eng_devcrypto.c +++ b/crypto/engine/eng_devcrypto.c @@ -624,12 +624,20 @@ void engine_load_devcrypto_int() prepare_digest_methods(); #endif - if ((e = ENGINE_new()) == NULL) + if ((e = ENGINE_new()) == NULL + || !ENGINE_set_destroy_function(e, devcrypto_unload)) { + ENGINE_free(e); + /* + * We know that devcrypto_unload() won't be called when one of the + * above two calls have failed, so we close cfd explicitly here to + * avoid leaking resources. + */ + close(cfd); return; + } if (!ENGINE_set_id(e, "devcrypto") || !ENGINE_set_name(e, "/dev/crypto engine") - || !ENGINE_set_destroy_function(e, devcrypto_unload) /* * Asymmetric ciphers aren't well supported with /dev/crypto. Among the BSD