[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