gsskrb5: Add missing unlock in _gsskrb5_duplicate_cred() failure case
authorNicolas Williams <nico@twosigma.com>
Wed, 4 Jan 2023 22:20:32 +0000 (16:20 -0600)
committerNicolas Williams <nico@twosigma.com>
Wed, 4 Jan 2023 22:20:32 +0000 (16:20 -0600)
lib/gssapi/krb5/duplicate_cred.c

index f5b34c5144b7d5f6e7c007173f8facd43cdfe856..a44ec3b239cfbe25beae4561659217279efe8fb9 100644 (file)
@@ -76,12 +76,6 @@ OM_uint32 GSSAPI_CALLCONV _gsskrb5_duplicate_cred (
     HEIMDAL_MUTEX_lock(&cred->cred_id_mutex);
 
     dup->destination_realm = NULL;
-    if (cred->destination_realm &&
-        (dup->destination_realm = strdup(cred->destination_realm)) == NULL) {
-        *minor_status = krb5_enomem(context);
-        free(dup);
-        return (GSS_S_FAILURE);
-    }
     dup->usage = cred->usage;
     dup->endtime = cred->endtime;
     dup->principal = NULL;
@@ -92,6 +86,11 @@ OM_uint32 GSSAPI_CALLCONV _gsskrb5_duplicate_cred (
     major = GSS_S_FAILURE;
 
     HEIMDAL_MUTEX_init(&dup->cred_id_mutex);
+    if (cred->destination_realm &&
+        (dup->destination_realm = strdup(cred->destination_realm)) == NULL) {
+        *minor_status = krb5_enomem(context);
+        goto fail;
+    }
     *minor_status = krb5_copy_principal(context, cred->principal,
                                         &dup->principal);
     if (*minor_status)