[SCM] Samba Shared Repository - branch master updated

David Disseldorp ddiss at samba.org
Wed Nov 5 04:23:33 MST 2014


The branch, master has been updated
       via  6faef4d btrfs: don't leak opened directory handle
      from  7467f6e s3: nmbd: Ensure NetBIOS names are only 15 characters stored.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 6faef4d213e76077bdbaf83cf07f0261c11dc757
Author: Noel Power <noel.power at suse.com>
Date:   Tue Nov 4 16:52:49 2014 +0100

    btrfs: don't leak opened directory handle
    
    Closing a directory handle file descriptor via close() is undefined,
    according to:
    http://pubs.opengroup.org/onlinepubs/9699919799/functions/dirfd.html
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): David Disseldorp <ddiss at samba.org>
    Autobuild-Date(master): Tue Nov  4 20:51:02 CET 2014 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_btrfs.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_btrfs.c b/source3/modules/vfs_btrfs.c
index c1e17b3..5144239 100644
--- a/source3/modules/vfs_btrfs.c
+++ b/source3/modules/vfs_btrfs.c
@@ -245,23 +245,29 @@ static NTSTATUS btrfs_get_compression(struct vfs_handle_struct *handle,
 	int fd;
 	bool opened = false;
 	NTSTATUS status;
+	DIR *dir = NULL;
 
 	if ((fsp != NULL) && (fsp->fh->fd != -1)) {
 		fd = fsp->fh->fd;
 	} else if (smb_fname != NULL) {
 		if (S_ISDIR(smb_fname->st.st_ex_mode)) {
-			DIR *dir = opendir(smb_fname->base_name);
+			dir = opendir(smb_fname->base_name);
 			if (dir == NULL) {
 				return NT_STATUS_UNSUCCESSFUL;
 			}
+			opened = true;
 			fd = dirfd(dir);
+			if (fd < 0) {
+				status = NT_STATUS_UNSUCCESSFUL;
+				goto err_close;
+			}
 		} else {
 			fd = open(smb_fname->base_name, O_RDONLY);
+			if (fd < 0) {
+				return NT_STATUS_UNSUCCESSFUL;
+			}
+			opened = true;
 		}
-		if (fd < 0) {
-			return NT_STATUS_UNSUCCESSFUL;
-		}
-		opened = true;
 	} else {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
@@ -281,7 +287,11 @@ static NTSTATUS btrfs_get_compression(struct vfs_handle_struct *handle,
 	status = NT_STATUS_OK;
 err_close:
 	if (opened) {
-		close(fd);
+		if (dir != NULL) {
+			closedir(dir);
+		} else {
+			close(fd);
+		}
 	}
 
 	return status;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list