[PATCH 26/27] smbXsrv: don't leak lock_path onto talloc tos

David Disseldorp ddiss at samba.org
Sun Nov 2 12:21:48 MST 2014


Also check for allocation failures.

Signed-off-by: David Disseldorp <ddiss at samba.org>
---
 source3/smbd/smbXsrv_open.c    | 6 +++++-
 source3/smbd/smbXsrv_session.c | 6 +++++-
 source3/smbd/smbXsrv_tcon.c    | 6 +++++-
 source3/smbd/smbXsrv_version.c | 4 ++++
 4 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/source3/smbd/smbXsrv_open.c b/source3/smbd/smbXsrv_open.c
index bb2084d..03b0123 100644
--- a/source3/smbd/smbXsrv_open.c
+++ b/source3/smbd/smbXsrv_open.c
@@ -49,7 +49,7 @@ static struct db_context *smbXsrv_open_global_db_ctx = NULL;
 
 NTSTATUS smbXsrv_open_global_init(void)
 {
-	const char *global_path = NULL;
+	char *global_path = NULL;
 	struct db_context *db_ctx = NULL;
 
 	if (smbXsrv_open_global_db_ctx != NULL) {
@@ -57,6 +57,9 @@ NTSTATUS smbXsrv_open_global_init(void)
 	}
 
 	global_path = lock_path("smbXsrv_open_global.tdb");
+	if (global_path == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	db_ctx = db_open(NULL, global_path,
 			 0, /* hash_size */
@@ -66,6 +69,7 @@ NTSTATUS smbXsrv_open_global_init(void)
 			 O_RDWR | O_CREAT, 0600,
 			 DBWRAP_LOCK_ORDER_1,
 			 DBWRAP_FLAG_NONE);
+	TALLOC_FREE(global_path);
 	if (db_ctx == NULL) {
 		NTSTATUS status;
 
diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c
index 7eca968..c5b7b79 100644
--- a/source3/smbd/smbXsrv_session.c
+++ b/source3/smbd/smbXsrv_session.c
@@ -59,7 +59,7 @@ static struct db_context *smbXsrv_session_global_db_ctx = NULL;
 
 NTSTATUS smbXsrv_session_global_init(void)
 {
-	const char *global_path = NULL;
+	char *global_path = NULL;
 	struct db_context *db_ctx = NULL;
 
 	if (smbXsrv_session_global_db_ctx != NULL) {
@@ -70,6 +70,9 @@ NTSTATUS smbXsrv_session_global_init(void)
 	 * This contains secret information like session keys!
 	 */
 	global_path = lock_path("smbXsrv_session_global.tdb");
+	if (global_path == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	db_ctx = db_open(NULL, global_path,
 			 0, /* hash_size */
@@ -79,6 +82,7 @@ NTSTATUS smbXsrv_session_global_init(void)
 			 O_RDWR | O_CREAT, 0600,
 			 DBWRAP_LOCK_ORDER_1,
 			 DBWRAP_FLAG_NONE);
+	TALLOC_FREE(global_path);
 	if (db_ctx == NULL) {
 		NTSTATUS status;
 
diff --git a/source3/smbd/smbXsrv_tcon.c b/source3/smbd/smbXsrv_tcon.c
index 8d0c292..89a25e8 100644
--- a/source3/smbd/smbXsrv_tcon.c
+++ b/source3/smbd/smbXsrv_tcon.c
@@ -47,7 +47,7 @@ static struct db_context *smbXsrv_tcon_global_db_ctx = NULL;
 
 NTSTATUS smbXsrv_tcon_global_init(void)
 {
-	const char *global_path = NULL;
+	char *global_path = NULL;
 	struct db_context *db_ctx = NULL;
 
 	if (smbXsrv_tcon_global_db_ctx != NULL) {
@@ -55,6 +55,9 @@ NTSTATUS smbXsrv_tcon_global_init(void)
 	}
 
 	global_path = lock_path("smbXsrv_tcon_global.tdb");
+	if (global_path == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	db_ctx = db_open(NULL, global_path,
 			 0, /* hash_size */
@@ -64,6 +67,7 @@ NTSTATUS smbXsrv_tcon_global_init(void)
 			 O_RDWR | O_CREAT, 0600,
 			 DBWRAP_LOCK_ORDER_1,
 			 DBWRAP_FLAG_NONE);
+	TALLOC_FREE(global_path);
 	if (db_ctx == NULL) {
 		NTSTATUS status;
 
diff --git a/source3/smbd/smbXsrv_version.c b/source3/smbd/smbXsrv_version.c
index b24dae9..e318e7d 100644
--- a/source3/smbd/smbXsrv_version.c
+++ b/source3/smbd/smbXsrv_version.c
@@ -73,6 +73,10 @@ NTSTATUS smbXsrv_version_global_init(const struct server_id *server_id)
 	frame = talloc_stackframe();
 
 	global_path = lock_path("smbXsrv_version_global.tdb");
+	if (global_path == NULL) {
+		TALLOC_FREE(frame);
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	db_ctx = db_open(NULL, global_path,
 			 0, /* hash_size */
-- 
1.8.4.5



More information about the samba-technical mailing list