[PATCH] Fix vfs_commit in case "eof mode" is not "none"

Uri Simchoni uri at samba.org
Wed Oct 7 20:06:16 UTC 2015


Stumbled upon this one when fiddling with open code of some VFS modules...

Seems like an SMB_VFS_FSTAT is attempted without a file descriptor.

https://bugzilla.samba.org/show_bug.cgi?id=11547

Please review.

ps,
I also have to wonder about calling SMB_VFS_FSTAT - seems like 
SMB_VFS_NEXT_FSTAT would be the correct thing to do.

Thanks,
Uri.
-------------- next part --------------
From 93652b506b56921eb2bc47238d4b398139991d28 Mon Sep 17 00:00:00 2001
From: Uri Simchoni <uri at samba.org>
Date: Wed, 7 Oct 2015 22:44:11 +0300
Subject: [PATCH] vfs_commit: set the fd on open before calling SMB_VFS_FSTAT

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11547

Signed-off-by: Uri Simchoni <uri at samba.org>
---
 source3/modules/vfs_commit.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/source3/modules/vfs_commit.c b/source3/modules/vfs_commit.c
index a6bc2a4..f1e2743 100644
--- a/source3/modules/vfs_commit.c
+++ b/source3/modules/vfs_commit.c
@@ -230,7 +230,16 @@ static int commit_open(
         /* EOF commit modes require us to know the initial file size. */
         if (c && (c->on_eof != EOF_NONE)) {
                 SMB_STRUCT_STAT st;
-                if (SMB_VFS_FSTAT(fsp, &st) == -1) {
+		/*
+		 * Setting the fd of the FSP is a hack
+		 * but also practiced elsewhere -
+		 * needed for calling the VFS.
+		 */
+		fsp->fh->fd = fd;
+		if (SMB_VFS_FSTAT(fsp, &st) == -1) {
+			int saved_errno = errno;
+			SMB_VFS_CLOSE(fsp);
+			errno = saved_errno;
                         return -1;
                 }
 		c->eof = st.st_ex_size;
-- 
1.9.1



More information about the samba-technical mailing list