Commit 58314197 authored by Richard Levitte's avatar Richard Levitte
Browse files

Avoid possible memleak in X509_policy_check()



When tree_calculate_user_set() fails, a jump to error failed to
deallocate a possibly allocated |auth_nodes|.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3851)
parent 95f966b7
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -732,6 +732,7 @@ int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,
                      STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags)
{
    int ret;
    int calc_ret;
    X509_POLICY_TREE *tree = NULL;
    STACK_OF(X509_POLICY_NODE) *nodes, *auth_nodes = NULL;
    *ptree = NULL;
@@ -800,17 +801,20 @@ int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,

    /* Tree is not empty: continue */

    ret = tree_calculate_authority_set(tree, &auth_nodes);
    calc_ret = tree_calculate_authority_set(tree, &auth_nodes);

    if (!ret)
    if (!calc_ret)
        goto error;

    if (!tree_calculate_user_set(tree, policy_oids, auth_nodes))
        goto error;
    ret = tree_calculate_user_set(tree, policy_oids, auth_nodes);

    if (ret == 2)
    if (calc_ret == 2)
        sk_X509_POLICY_NODE_free(auth_nodes);

    if (!ret)
        goto error;


    if (tree)
        *ptree = tree;