From 680653db20cc20c4f77808b7ed13c47887b00c02 Mon Sep 17 00:00:00 2001
From: Marios Makassikis <mmakassikis@freebox.fr>
Date: Mon, 10 Oct 2022 14:13:29 +0200
Subject: [PATCH] ksmbd-tools: fix potential double-frees

---
 lib/management/session.c | 1 +
 lib/management/share.c   | 2 ++
 lib/management/user.c    | 1 +
 mountd/rpc.c             | 1 +
 mountd/rpc_lsarpc.c      | 4 +++-
 mountd/rpc_samr.c        | 8 ++++++--
 6 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/lib/management/session.c b/lib/management/session.c
index 0eca8fb5a823..cc410f9259ae 100644
--- a/lib/management/session.c
+++ b/lib/management/session.c
@@ -221,6 +221,7 @@ void sm_destroy(void)
 	if (sessions_table) {
 		sm_clear_sessions();
 		g_hash_table_destroy(sessions_table);
+		sessions_table = NULL;
 	}
 	g_rw_lock_clear(&sessions_table_lock);
 }
diff --git a/lib/management/share.c b/lib/management/share.c
index f045b42b5c14..32b25e129331 100644
--- a/lib/management/share.c
+++ b/lib/management/share.c
@@ -108,6 +108,8 @@ static void kill_ksmbd_share(struct ksmbd_share *share)
 
 	free_hosts_map(share->hosts_allow_map);
 	free_hosts_map(share->hosts_deny_map);
+	share->hosts_allow_map = NULL;
+	share->hosts_deny_map = NULL;
 
 	g_rw_lock_clear(&share->maps_lock);
 
diff --git a/lib/management/user.c b/lib/management/user.c
index 8f481c8e3273..e3643326c99f 100644
--- a/lib/management/user.c
+++ b/lib/management/user.c
@@ -133,6 +133,7 @@ void usm_destroy(void)
 	if (users_table) {
 		usm_clear_users();
 		g_hash_table_destroy(users_table);
+		users_table = NULL;
 	}
 	g_rw_lock_clear(&users_table_lock);
 }
diff --git a/mountd/rpc.c b/mountd/rpc.c
index ea85b0f7e105..f062cf7e10d3 100644
--- a/mountd/rpc.c
+++ b/mountd/rpc.c
@@ -737,6 +737,7 @@ void rpc_destroy(void)
 	if (pipes_table) {
 		__clear_pipes_table();
 		g_hash_table_destroy(pipes_table);
+		pipes_table = NULL;
 	}
 	g_rw_lock_clear(&pipes_table_lock);
 	rpc_samr_destroy();
diff --git a/mountd/rpc_lsarpc.c b/mountd/rpc_lsarpc.c
index 184883d69bf6..4a667395cae0 100644
--- a/mountd/rpc_lsarpc.c
+++ b/mountd/rpc_lsarpc.c
@@ -603,7 +603,9 @@ int rpc_lsarpc_init(void)
 void rpc_lsarpc_destroy(void)
 {
 	g_free(domain_name);
-	if (ph_table)
+	if (ph_table) {
 		g_hash_table_destroy(ph_table);
+		ph_table = NULL;
+	}
 	g_rw_lock_clear(&ph_table_lock);
 }
diff --git a/mountd/rpc_samr.c b/mountd/rpc_samr.c
index f4afadcbc0cf..c7cf407e0338 100644
--- a/mountd/rpc_samr.c
+++ b/mountd/rpc_samr.c
@@ -818,11 +818,15 @@ int rpc_samr_init(void)
 
 void rpc_samr_destroy(void)
 {
-	if (ch_table)
+	if (ch_table) {
 		g_hash_table_destroy(ch_table);
+		ch_table = NULL;
+	}
 	g_rw_lock_clear(&ch_table_lock);
 	num_domain_entries = 0;
 	g_free(domain_name);
-	if (domain_entries)
+	if (domain_entries) {
 		g_array_free(domain_entries, 1);
+		domain_entries = NULL;
+	}
 }
-- 
2.25.1

