Updatde from stable branch.

This commit is contained in:
Dr. Stephen Henson 2009-01-07 23:44:27 +00:00
parent cec2af7510
commit bab534057b
11 changed files with 18 additions and 14 deletions

View File

@ -727,7 +727,11 @@
*) Change 'Configure' script to enable Camellia by default. *) Change 'Configure' script to enable Camellia by default.
[NTT] [NTT]
Changes between 0.9.8i and 0.9.8j [xx XXX xxxx] Changes between 0.9.8i and 0.9.8j [07 Jan 2009]
*) Properly check EVP_VerifyFinal() and similar return values
(CVE-2008-5077).
[Ben Laurie, Bodo Moeller, Google Security Team]
*) Allow the CHIL engine to be loaded, whether the application is *) Allow the CHIL engine to be loaded, whether the application is
multithreaded or not. (This does not release the developer from the multithreaded or not. (This does not release the developer from the

View File

@ -1994,7 +1994,7 @@ int MAIN(int argc, char **argv)
{ {
ret=RSA_verify(NID_md5_sha1, buf,36, buf2, ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
rsa_num, rsa_key[j]); rsa_num, rsa_key[j]);
if (ret == 0) if (ret <= 0)
{ {
BIO_printf(bio_err, BIO_printf(bio_err,
"RSA verify failure\n"); "RSA verify failure\n");

View File

@ -285,7 +285,7 @@ bad:
pkey = NETSCAPE_SPKI_get_pubkey(spki); pkey = NETSCAPE_SPKI_get_pubkey(spki);
if(verify) { if(verify) {
i = NETSCAPE_SPKI_verify(spki, pkey); i = NETSCAPE_SPKI_verify(spki, pkey);
if(i) BIO_printf(bio_err, "Signature OK\n"); if (i > 0) BIO_printf(bio_err, "Signature OK\n");
else { else {
BIO_printf(bio_err, "Signature Failure\n"); BIO_printf(bio_err, "Signature Failure\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);

View File

@ -266,7 +266,7 @@ static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X
ret=0; ret=0;
end: end:
if (i) if (i > 0)
{ {
fprintf(stdout,"OK\n"); fprintf(stdout,"OK\n");
ret=1; ret=1;
@ -367,4 +367,3 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
ERR_clear_error(); ERR_clear_error();
return(ok); return(ok);
} }

View File

@ -1130,7 +1130,7 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
/* NOTE: this certificate can/should be self signed, unless it was /* NOTE: this certificate can/should be self signed, unless it was
* a certificate request in which case it is not. */ * a certificate request in which case it is not. */
X509_STORE_CTX_set_cert(&xsc,x); X509_STORE_CTX_set_cert(&xsc,x);
if (!reqfile && !X509_verify_cert(&xsc)) if (!reqfile && X509_verify_cert(&xsc) <= 0)
goto end; goto end;
if (!X509_check_private_key(xca,pkey)) if (!X509_check_private_key(xca,pkey))

View File

@ -1,2 +1,3 @@
lib lib
Makefile.save Makefile.save
cmll-*.s

View File

@ -1046,7 +1046,7 @@ int ssl2_set_certificate(SSL *s, int type, int len, const unsigned char *data)
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if ((s->verify_mode != SSL_VERIFY_NONE) && (!i)) if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0))
{ {
SSLerr(SSL_F_SSL2_SET_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED); SSLerr(SSL_F_SSL2_SET_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED);
goto err; goto err;

View File

@ -1054,7 +1054,7 @@ static int request_certificate(SSL *s)
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if (i) /* we like the packet, now check the chksum */ if (i > 0) /* we like the packet, now check the chksum */
{ {
EVP_MD_CTX ctx; EVP_MD_CTX ctx;
EVP_PKEY *pkey=NULL; EVP_PKEY *pkey=NULL;
@ -1083,7 +1083,7 @@ static int request_certificate(SSL *s)
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
EVP_MD_CTX_cleanup(&ctx); EVP_MD_CTX_cleanup(&ctx);
if (i) if (i > 0)
{ {
if (s->session->peer != NULL) if (s->session->peer != NULL)
X509_free(s->session->peer); X509_free(s->session->peer);

View File

@ -1018,7 +1018,7 @@ int ssl3_get_server_certificate(SSL *s)
} }
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if ((s->verify_mode != SSL_VERIFY_NONE) && (!i) if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0)
#ifndef OPENSSL_NO_KRB5 #ifndef OPENSSL_NO_KRB5
&& !((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5) && && !((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5) &&
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5)) (s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5))
@ -1554,7 +1554,7 @@ int ssl3_get_key_exchange(SSL *s)
EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,param,param_len); EVP_VerifyUpdate(&md_ctx,param,param_len);
if (!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)
{ {
/* bad signature */ /* bad signature */
al=SSL_AD_DECRYPT_ERROR; al=SSL_AD_DECRYPT_ERROR;
@ -1572,7 +1572,7 @@ int ssl3_get_key_exchange(SSL *s)
EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,param,param_len); EVP_VerifyUpdate(&md_ctx,param,param_len);
if (!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)
{ {
/* bad signature */ /* bad signature */
al=SSL_AD_DECRYPT_ERROR; al=SSL_AD_DECRYPT_ERROR;

View File

@ -2844,7 +2844,7 @@ int ssl3_get_client_certificate(SSL *s)
else else
{ {
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if (!i) if (i <= 0)
{ {
al=ssl_verify_alarm_type(s->verify_result); al=ssl_verify_alarm_type(s->verify_result);
SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATE_RETURNED); SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATE_RETURNED);

View File

@ -2177,7 +2177,7 @@ static int MS_CALLBACK app_verify_callback(X509_STORE_CTX *ctx, void *arg)
if (cb_arg->proxy_auth) if (cb_arg->proxy_auth)
{ {
if (ok) if (ok > 0)
{ {
const char *cond_end = NULL; const char *cond_end = NULL;