smbXsrv: don't leak lock_path onto talloc tos
authorDavid Disseldorp <ddiss@samba.org>
Sun, 2 Nov 2014 19:21:48 +0000 (20:21 +0100)
committerJeremy Allison <jra@samba.org>
Mon, 3 Nov 2014 22:46:05 +0000 (23:46 +0100)
Also check for allocation failures.

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/smbXsrv_open.c
source3/smbd/smbXsrv_session.c
source3/smbd/smbXsrv_tcon.c
source3/smbd/smbXsrv_version.c

index bb2084ddbc11b0a0fb4296642589a31c59b69c8b..03b0123bba9120c212a0ae90946669cf1d38346f 100644 (file)
@@ -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;
 
index 7eca968285338925e4e2eee6f2ded3a6a0beeb08..c5b7b7936c9f5cdc03611e8510094d11dbcd16e1 100644 (file)
@@ -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;
 
index 8d0c292b0abce2039b781460baa9b2ffe504e746..89a25e8bee782c49c817ad4aa85db836c1fa9a6a 100644 (file)
@@ -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;
 
index b24dae9f12f044dc316df1e3231840111de24195..e318e7de1e0aa64215dff6eb4daab6e507863f16 100644 (file)
@@ -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 */