mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 05:21:51 +08:00
aae41f8c54
The function X509_verify_cert checks the value of |ctx->chain| at the beginning, and if it is NULL then it initialises it, along with the value of ctx->untrusted. The normal way to use X509_verify_cert() is to first call X509_STORE_CTX_init(); then set up various parameters etc; then call X509_verify_cert(); then check the results; and finally call X509_STORE_CTX_cleanup(). The initial call to X509_STORE_CTX_init() sets |ctx->chain| to NULL. The only place in the OpenSSL codebase where |ctx->chain| is set to anything other than a non NULL value is in X509_verify_cert itself. Therefore the only ways that |ctx->chain| could be non NULL on entry to X509_verify_cert is if one of the following occurs: 1) An application calls X509_verify_cert() twice without re-initialising in between. 2) An application reaches inside the X509_STORE_CTX structure and changes the value of |ctx->chain| directly. With regards to the second of these, we should discount this - it should not be supported to allow this. With regards to the first of these, the documentation is not exactly crystal clear, but the implication is that you must call X509_STORE_CTX_init() before each call to X509_verify_cert(). If you fail to do this then, at best, the results would be undefined. Calling X509_verify_cert() with |ctx->chain| set to a non NULL value is likely to have unexpected results, and could be dangerous. This commit changes the behaviour of X509_verify_cert() so that it causes an error if |ctx->chain| is anything other than NULL (because this indicates that we have not been initialised properly). It also clarifies the associated documentation. This is a follow up commit to CVE-2015-1793. Reviewed-by: Stephen Henson <steve@openssl.org> |
||
---|---|---|
.. | ||
apps | ||
crypto | ||
HOWTO | ||
ssl | ||
fingerprints.txt | ||
openssl_button.gif | ||
openssl_button.html | ||
README | ||
standards.txt |
apps/openssl.pod .... Documentation of OpenSSL `openssl' command crypto/crypto.pod ... Documentation of OpenSSL crypto.h (libcrypto) ssl/ssl.pod ......... Documentation of OpenSSL ssl.h (libssl) standards.txt ....... Pointers to standards, RFCs or internet drafts that are related to OpenSSL. Incomplete. HTML versions are on https://www.openssl.org/docs