]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
CVE-2020-25722 s4/dsdb/cracknames: always free tmp_ctx in spn_alias
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Wed, 11 Aug 2021 04:56:07 +0000 (16:56 +1200)
committerJule Anger <janger@samba.org>
Tue, 9 Nov 2021 19:45:33 +0000 (19:45 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14564

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/dsdb/samdb/cracknames.c

index f298ef3df6f45bba6ac19a8b9a28ddc4814f41b5..0aefaa1e58e9c7727d60182d98ebd6da8cc28c57 100644 (file)
@@ -101,10 +101,12 @@ static enum drsuapi_DsNameStatus LDB_lookup_spn_alias(krb5_context context, stru
 
        service_dn = ldb_dn_new(tmp_ctx, ldb_ctx, "CN=Directory Service,CN=Windows NT,CN=Services");
        if ( ! ldb_dn_add_base(service_dn, ldb_get_config_basedn(ldb_ctx))) {
+               talloc_free(tmp_ctx);
                return DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
        }
        service_dn_str = ldb_dn_alloc_linearized(tmp_ctx, service_dn);
        if ( ! service_dn_str) {
+               talloc_free(tmp_ctx);
                return DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
        }
 
@@ -113,13 +115,15 @@ static enum drsuapi_DsNameStatus LDB_lookup_spn_alias(krb5_context context, stru
 
        if (ret != LDB_SUCCESS && ret != LDB_ERR_NO_SUCH_OBJECT) {
                DEBUG(1, ("ldb_search: dn: %s not found: %s\n", service_dn_str, ldb_errstring(ldb_ctx)));
+               talloc_free(tmp_ctx);
                return DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
        } else if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                DEBUG(1, ("ldb_search: dn: %s not found\n", service_dn_str));
+               talloc_free(tmp_ctx);
                return DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
        } else if (res->count != 1) {
-               talloc_free(res);
                DEBUG(1, ("ldb_search: dn: %s not found\n", service_dn_str));
+               talloc_free(tmp_ctx);
                return DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
        }