Fix bug #8562 - talloc: double free error.
authorJeremy Allison <jra@samba.org>
Thu, 3 Nov 2011 21:30:11 +0000 (14:30 -0700)
committerKarolin Seeger <kseeger@samba.org>
Thu, 17 Nov 2011 18:41:01 +0000 (19:41 +0100)
Ensure we don't access an undefined pointer.

Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Fri Nov  4 00:09:46 CET 2011 on sn-devel-104
(cherry picked from commit 767c54d8dd9596718579699398392ae234b40aa2)

source3/rpc_server/netlogon/srv_netlog_nt.c

index ecdfac707b3f9bd24a246e25832e9e919784753c..3fd93bcb2805cec1820cbd80d5aca7e288ab249f 100644 (file)
@@ -1251,7 +1251,7 @@ NTSTATUS _netr_ServerPasswordSet2(struct pipes_struct *p,
                                  struct netr_ServerPasswordSet2 *r)
 {
        NTSTATUS status;
-       struct netlogon_creds_CredentialState *creds;
+       struct netlogon_creds_CredentialState *creds = NULL;
        DATA_BLOB plaintext;
        struct samr_CryptPassword password_buf;
        struct samr_Password nt_hash;
@@ -1265,9 +1265,14 @@ NTSTATUS _netr_ServerPasswordSet2(struct pipes_struct *p,
        unbecome_root();
 
        if (!NT_STATUS_IS_OK(status)) {
+               const char *computer_name = "<unknown>";
+
+               if (creds && creds->computer_name) {
+                       computer_name = creds->computer_name;
+               }
                DEBUG(2,("_netr_ServerPasswordSet2: netlogon_creds_server_step "
                        "failed. Rejecting auth request from client %s machine account %s\n",
-                       r->in.computer_name, creds->computer_name));
+                       r->in.computer_name, computer_name));
                TALLOC_FREE(creds);
                return status;
        }
@@ -1277,6 +1282,7 @@ NTSTATUS _netr_ServerPasswordSet2(struct pipes_struct *p,
        netlogon_creds_arcfour_crypt(creds, password_buf.data, 516);
 
        if (!extract_pw_from_buffer(p->mem_ctx, password_buf.data, &plaintext)) {
+               TALLOC_FREE(creds);
                return NT_STATUS_WRONG_PASSWORD;
        }
 
@@ -1287,6 +1293,7 @@ NTSTATUS _netr_ServerPasswordSet2(struct pipes_struct *p,
                                                   p->msg_ctx,
                                                   creds->account_name,
                                                   &nt_hash);
+       TALLOC_FREE(creds);
        return status;
 }