summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2014-11-02 20:21:48 +0100
committerJeremy Allison <jra@samba.org>2014-11-03 23:46:05 +0100
commitc5e241831c4d62ca9571fe3bec1434ecbf3e706c (patch)
tree8af9ee7435bfe4122fcb1f3893ebdfcf0ce7609a
parentca18783463d2f49a4249b0774196caafd4a08a22 (diff)
downloadsamba-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.c6
-rw-r--r--source3/smbd/smbXsrv_session.c6
-rw-r--r--source3/smbd/smbXsrv_tcon.c6
-rw-r--r--source3/smbd/smbXsrv_version.c4
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 */