Commit cd01707b authored by Richard Levitte's avatar Richard Levitte
Browse files

crypto/engine/eng_devcrypto.c: ensure we don't leak resources



If engine building fails for some reason, we must make sure to close
the /dev/crypto handle.

Reviewed-by: default avatarBernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/7506)

(cherry picked from commit 681e8cacdbdc44ac00af29b6656fc52745a9baa2)
parent 120fc33e
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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