提交 e670db01 编写于 作者: B Bernd Edlinger

Fix an information leak in the RSA padding check code.

The memory blocks contain secret data and must be
cleared before returning to the system heap.
Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4062)
上级 b93a295a
...@@ -117,7 +117,7 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, ...@@ -117,7 +117,7 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
int plen, const EVP_MD *md, int plen, const EVP_MD *md,
const EVP_MD *mgf1md) const EVP_MD *mgf1md)
{ {
int i, dblen, mlen = -1, one_index = 0, msg_index; int i, dblen = 0, mlen = -1, one_index = 0, msg_index;
unsigned int good, found_one_byte; unsigned int good, found_one_byte;
const unsigned char *maskedseed, *maskeddb; const unsigned char *maskedseed, *maskeddb;
/* /*
...@@ -234,8 +234,8 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, ...@@ -234,8 +234,8 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1, RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1,
RSA_R_OAEP_DECODING_ERROR); RSA_R_OAEP_DECODING_ERROR);
cleanup: cleanup:
OPENSSL_free(db); OPENSSL_clear_free(db, dblen);
OPENSSL_free(em); OPENSSL_clear_free(em, num);
return mlen; return mlen;
} }
......
...@@ -235,7 +235,7 @@ int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, ...@@ -235,7 +235,7 @@ int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
memcpy(to, em + msg_index, mlen); memcpy(to, em + msg_index, mlen);
err: err:
OPENSSL_free(em); OPENSSL_clear_free(em, num);
if (mlen == -1) if (mlen == -1)
RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2, RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2,
RSA_R_PKCS_DECODING_ERROR); RSA_R_PKCS_DECODING_ERROR);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册