fixed invalid free
We duplicate mechanisms based on OpenSSL so that they can be freed along all the card's algorithms created via sc_pkcs11_new_fw_mechanism. Fixes regression from eaf548aa3dab80a9bbf51da8291e7db978e3a2ad
This commit is contained in:
parent
e338b7c1ab
commit
ef4edb74ba
|
@ -934,6 +934,7 @@ sc_pkcs11_derive(sc_pkcs11_operation_t *operation,
|
||||||
pmechParam, ulmechParamLen,
|
pmechParam, ulmechParamLen,
|
||||||
pData, pulDataLen);
|
pData, pulDataLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create new mechanism type for a mechanism supported by
|
* Create new mechanism type for a mechanism supported by
|
||||||
* the card
|
* the card
|
||||||
|
|
|
@ -158,6 +158,14 @@ static sc_pkcs11_mechanism_type_t openssl_ripemd160_mech = {
|
||||||
NULL, /* free_mech_data */
|
NULL, /* free_mech_data */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void * dup_mem(void *in, size_t in_len)
|
||||||
|
{
|
||||||
|
void *out = malloc(in_len);
|
||||||
|
if (out)
|
||||||
|
memcpy(out, in, in_len);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sc_pkcs11_register_openssl_mechanisms(struct sc_pkcs11_card *card)
|
sc_pkcs11_register_openssl_mechanisms(struct sc_pkcs11_card *card)
|
||||||
{
|
{
|
||||||
|
@ -199,22 +207,22 @@ sc_pkcs11_register_openssl_mechanisms(struct sc_pkcs11_card *card)
|
||||||
#endif /* OPENSSL_VERSION_NUMBER >= 0x10000000L && !defined(OPENSSL_NO_ENGINE) */
|
#endif /* OPENSSL_VERSION_NUMBER >= 0x10000000L && !defined(OPENSSL_NO_ENGINE) */
|
||||||
|
|
||||||
openssl_sha1_mech.mech_data = EVP_sha1();
|
openssl_sha1_mech.mech_data = EVP_sha1();
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_sha1_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_sha1_mech, sizeof openssl_sha1_mech));
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x00908000L
|
#if OPENSSL_VERSION_NUMBER >= 0x00908000L
|
||||||
openssl_sha256_mech.mech_data = EVP_sha256();
|
openssl_sha256_mech.mech_data = EVP_sha256();
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_sha256_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_sha256_mech, sizeof openssl_sha256_mech));
|
||||||
openssl_sha384_mech.mech_data = EVP_sha384();
|
openssl_sha384_mech.mech_data = EVP_sha384();
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_sha384_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_sha384_mech, sizeof openssl_sha384_mech));
|
||||||
openssl_sha512_mech.mech_data = EVP_sha512();
|
openssl_sha512_mech.mech_data = EVP_sha512();
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_sha512_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_sha512_mech, sizeof openssl_sha512_mech));
|
||||||
#endif
|
#endif
|
||||||
openssl_md5_mech.mech_data = EVP_md5();
|
openssl_md5_mech.mech_data = EVP_md5();
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_md5_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_md5_mech, sizeof openssl_md5_mech));
|
||||||
openssl_ripemd160_mech.mech_data = EVP_ripemd160();
|
openssl_ripemd160_mech.mech_data = EVP_ripemd160();
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_ripemd160_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_ripemd160_mech, sizeof openssl_ripemd160_mech));
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
|
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
|
||||||
openssl_gostr3411_mech.mech_data = EVP_get_digestbynid(NID_id_GostR3411_94);
|
openssl_gostr3411_mech.mech_data = EVP_get_digestbynid(NID_id_GostR3411_94);
|
||||||
sc_pkcs11_register_mechanism(card, &openssl_gostr3411_mech);
|
sc_pkcs11_register_mechanism(card, dup_mem(&openssl_gostr3411_mech, sizeof openssl_gostr3411_mech));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue