Make sure we use the libctx in libssl when loading PrivateKeys

Since loading a private key might require algorithm fetches we should
make sure the correct libctx is used.

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/11494)
This commit is contained in:
Matt Caswell 2020-04-06 18:24:05 +01:00
parent 1531241c54
commit d6a2bdf7f1

View File

@ -264,12 +264,15 @@ int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type)
} }
if (type == SSL_FILETYPE_PEM) { if (type == SSL_FILETYPE_PEM) {
j = ERR_R_PEM_LIB; j = ERR_R_PEM_LIB;
pkey = PEM_read_bio_PrivateKey(in, NULL, pkey = PEM_read_bio_PrivateKey_ex(in, NULL,
ssl->default_passwd_callback, ssl->default_passwd_callback,
ssl->default_passwd_callback_userdata); ssl->default_passwd_callback_userdata,
ssl->ctx->libctx,
ssl->ctx->propq);
} else if (type == SSL_FILETYPE_ASN1) { } else if (type == SSL_FILETYPE_ASN1) {
j = ERR_R_ASN1_LIB; j = ERR_R_ASN1_LIB;
pkey = d2i_PrivateKey_bio(in, NULL); pkey = d2i_PrivateKey_ex_bio(in, NULL, ssl->ctx->libctx,
ssl->ctx->propq);
} else { } else {
SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE);
goto end; goto end;
@ -293,7 +296,8 @@ int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d,
EVP_PKEY *pkey; EVP_PKEY *pkey;
p = d; p = d;
if ((pkey = d2i_PrivateKey(type, NULL, &p, (long)len)) == NULL) { if ((pkey = d2i_PrivateKey_ex(type, NULL, &p, (long)len, ssl->ctx->libctx,
ssl->ctx->propq)) == NULL) {
SSLerr(SSL_F_SSL_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB); SSLerr(SSL_F_SSL_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB);
return 0; return 0;
} }
@ -551,12 +555,13 @@ int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type)
} }
if (type == SSL_FILETYPE_PEM) { if (type == SSL_FILETYPE_PEM) {
j = ERR_R_PEM_LIB; j = ERR_R_PEM_LIB;
pkey = PEM_read_bio_PrivateKey(in, NULL, pkey = PEM_read_bio_PrivateKey_ex(in, NULL,
ctx->default_passwd_callback, ctx->default_passwd_callback,
ctx->default_passwd_callback_userdata); ctx->default_passwd_callback_userdata,
ctx->libctx, ctx->propq);
} else if (type == SSL_FILETYPE_ASN1) { } else if (type == SSL_FILETYPE_ASN1) {
j = ERR_R_ASN1_LIB; j = ERR_R_ASN1_LIB;
pkey = d2i_PrivateKey_bio(in, NULL); pkey = d2i_PrivateKey_ex_bio(in, NULL, ctx->libctx, ctx->propq);
} else { } else {
SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE);
goto end; goto end;
@ -580,7 +585,8 @@ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx,
EVP_PKEY *pkey; EVP_PKEY *pkey;
p = d; p = d;
if ((pkey = d2i_PrivateKey(type, NULL, &p, (long)len)) == NULL) { if ((pkey = d2i_PrivateKey_ex(type, NULL, &p, (long)len, ctx->libctx,
ctx->propq)) == NULL) {
SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB); SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB);
return 0; return 0;
} }