SSL_check_chain fix
authorMatt Caswell <matt@openssl.org>
Wed, 11 Mar 2015 17:01:38 +0000 (17:01 +0000)
committerMatt Caswell <matt@openssl.org>
Thu, 12 Mar 2015 09:25:32 +0000 (09:25 +0000)
If SSL_check_chain is called with a NULL X509 object or a NULL EVP_PKEY
or the type of the public key is unrecognised then the local variable
|cpk| in tls1_check_chain does not get initialised. Subsequently an
attempt is made to deref it (after the "end" label), and a seg fault will
result.

Reviewed-by: Dr. Stephen Henson <steve@openssl.org>
ssl/t1_lib.c

index 8296ea1f5c43cd270ab1dd5a2825e1bd801738eb..b6e878ae214c48b5df91d0f81f07dcc2d18ac480 100644 (file)
@@ -3910,10 +3910,10 @@ int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
 # endif
     } else {
         if (!x || !pk)
-            goto end;
+            return 0;
         idx = ssl_cert_type(x, pk);
         if (idx == -1)
-            goto end;
+            return 0;
         cpk = c->pkeys + idx;
         if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
             check_flags = CERT_PKEY_STRICT_FLAGS;