diff options
author | David Disseldorp <ddiss@samba.org> | 2014-11-02 20:21:48 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-11-03 23:46:05 +0100 |
commit | c5e241831c4d62ca9571fe3bec1434ecbf3e706c (patch) | |
tree | 8af9ee7435bfe4122fcb1f3893ebdfcf0ce7609a | |
parent | ca18783463d2f49a4249b0774196caafd4a08a22 (diff) | |
download | samba-c5e241831c4d62ca9571fe3bec1434ecbf3e706c.tar.gz samba-c5e241831c4d62ca9571fe3bec1434ecbf3e706c.tar.xz samba-c5e241831c4d62ca9571fe3bec1434ecbf3e706c.zip |
smbXsrv: don't leak lock_path onto talloc tos
Also check for allocation failures.
Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r-- | source3/smbd/smbXsrv_open.c | 6 | ||||
-rw-r--r-- | source3/smbd/smbXsrv_session.c | 6 | ||||
-rw-r--r-- | source3/smbd/smbXsrv_tcon.c | 6 | ||||
-rw-r--r-- | 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 bb2084ddbc..03b0123bba 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 7eca968285..c5b7b7936c 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 8d0c292b0a..89a25e8bee 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 b24dae9f12..e318e7de1e 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 */ |