9881 smbd terminated by SIGABRT after smb_account_free()
Reviewed by: Gordon Ross <gordon.w.ross@gmail.com>
Reviewed by: Jason King <jason.brian.king@gmail.com>
Approved by: Dan McDonald <danmcd@joyent.com>
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_sam.c b/usr/src/lib/smbsrv/libsmb/common/smb_sam.c
index e236b56..68a7aa2 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_sam.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_sam.c
@@ -23,6 +23,7 @@
  * Use is subject to license terms.
  *
  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2018 RackTop Systems.
  */
 
 #include <strings.h>
@@ -91,7 +92,7 @@
  *
  *   NT_STATUS_NOT_FOUND	This is not a local account
  *   NT_STATUS_NONE_MAPPED	It's a local account but cannot be
- *   				translated.
+ *				translated.
  *   other error status codes.
  */
 uint32_t
@@ -201,7 +202,7 @@
  *
  *   NT_STATUS_NOT_FOUND	This is not a local account
  *   NT_STATUS_NONE_MAPPED	It's a local account but cannot be
- *   				translated.
+ *				translated.
  *   other error status codes.
  */
 uint32_t
@@ -477,6 +478,7 @@
 
 /*
  * Frees memories allocated for the passed account fields.
+ * Initializes @account after all.
  */
 void
 smb_account_free(smb_account_t *account)
@@ -485,6 +487,8 @@
 	free(account->a_domain);
 	smb_sid_free(account->a_sid);
 	smb_sid_free(account->a_domsid);
+
+	bzero(account, sizeof (smb_account_t));
 }
 
 /*