In some experimental code I'm  passing store == NULL
into X509_STORE_CTX_init however I find that my verify_cb is called for
every issuer/subject mismatch, as if I had set X509_V_FLAG_CB_ISSUER_CHECK
(which I haven't)

Digging into it, it appears the the X509_VERIFY_PARAM 'flags' field (in
ctx->param->flags) is being erroneously initialized with a value of 17
because it is being incorrectly initialized with enumeration constants
intended for the inh_flags field.

The values X509_VP_FLAG_DEFAULT|X509_VP_FLAG_ONCE == 17, which are
then interpreted as  X509_V_FLAG_CB_ISSUER_CHECK|X509_V_FLAG_IGNORE_CRITICAL
hence the reason I see the spurious CB_ISSUER_CHECK callbacks.


Suggested fix:-

diff --git a/crypto/x509/x509_vfy.c b/crypto/x509/x509_vfy.c
--- a/crypto/x509/x509_vfy.c
+++ b/crypto/x509/x509_vfy.c
@@ -2034,7 +2034,7 @@ int X509_STORE_CTX_init(X509_STORE_CTX *ctx,
X509_STORE *store, X509 *x509,
        if (store)
                ret = X509_VERIFY_PARAM_inherit(ctx->param, store->param);
        else
-               ctx->param->flags |= X509_VP_FLAG_DEFAULT|X509_VP_FLAG_ONCE;
+               ctx->param->inh_flags |=
X509_VP_FLAG_DEFAULT|X509_VP_FLAG_ONCE;

        if (store)
                {

Reply via email to