]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Release gnamebuf also on the error path
authorOndřej Surý <ondrej@isc.org>
Fri, 6 Feb 2026 16:50:55 +0000 (17:50 +0100)
committerOndřej Surý <ondrej@sury.org>
Fri, 6 Feb 2026 17:36:58 +0000 (18:36 +0100)
In dst_gssapi_acceptctx(), the gnamebuf could leak a little bit of
memory if dns_name_fromtext() would theoretically fail.  This would
require a Kerberos principal with invalid DNS name.

(cherry picked from commit 3ad87f1ad612fb6adce175760483735066300266)

lib/dns/gssapictx.c

index dc31020c9efaa2f63b56cffd4a713544c00ac18c..3cd0fbba1910c1a7ecfd84c9c5ab1568c1226a99 100644 (file)
@@ -777,15 +777,6 @@ dst_gssapi_acceptctx(dns_gss_cred_id_t cred, const char *gssapi_keytab,
 
                CHECK(dns_name_fromtext(principal, &namebuf, dns_rootname, 0,
                                        NULL));
-
-               if (gnamebuf.length != 0U) {
-                       gret = gss_release_buffer(&minor, &gnamebuf);
-                       if (gret != GSS_S_COMPLETE) {
-                               gss_log(3, "failed gss_release_buffer: %s",
-                                       gss_error_tostring(gret, minor, buf,
-                                                          sizeof(buf)));
-                       }
-               }
        } else {
                result = DNS_R_CONTINUE;
        }
@@ -793,6 +784,15 @@ dst_gssapi_acceptctx(dns_gss_cred_id_t cred, const char *gssapi_keytab,
        *ctxout = context;
 
 cleanup:
+       if (gnamebuf.length != 0U) {
+               gret = gss_release_buffer(&minor, &gnamebuf);
+               if (gret != GSS_S_COMPLETE) {
+                       gss_log(3, "failed gss_release_buffer: %s",
+                               gss_error_tostring(gret, minor, buf,
+                                                  sizeof(buf)));
+               }
+       }
+
        if (gname != NULL) {
                gret = gss_release_name(&minor, &gname);
                if (gret != GSS_S_COMPLETE) {