[SCM] Samba Shared Repository - branch v3-6-test updated

Karolin Seeger kseeger at samba.org
Wed Aug 7 03:27:42 MDT 2013


The branch, v3-6-test has been updated
       via  9ef80fc Ensure gpfs kernel leases are wrapped in a become_root()/unbecome_root() pair.
       via  3630254 Wrap setting leases in become_root()/unbecome_root() to ensure correct delivery of signals.
      from  b085c39 Fix bug 9678 - Windows 8 Roaming profiles fail

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 9ef80fcff6e0d03e30bd675cd7ebfc88608e81d6
Author: Ralph Wuerthner <ralphw at de.ibm.com>
Date:   Wed Jul 31 16:33:48 2013 -0700

    Ensure gpfs kernel leases are wrapped in a become_root()/unbecome_root() pair.
    
    Ensures correct lease owner for signal delivery.
    
    Signed-off-by: Ralph Wuerthner <ralphw at de.ibm.com>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Simo Sorce <idra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Aug  1 03:57:11 CEST 2013 on sn-devel-104
    
    The last 2 patches address bug #10064 - Linux kernel oplock breaks can miss
    signals.

commit 363025491d97171e130a7b8dd03296b9559799a0
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jul 31 16:32:20 2013 -0700

    Wrap setting leases in become_root()/unbecome_root() to ensure correct delivery of signals.
    
    Remove workaround for Linux kernel bug https://bugzilla.kernel.org/show_bug.cgi?id=43336
    as we don't need to set capabilities when we're already root.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Simo Sorce <idra at samba.org>

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

Summary of changes:
 source3/modules/vfs_gpfs.c  |    6 ++++++
 source3/smbd/oplock_linux.c |   33 ++++++++++++++++++++-------------
 2 files changed, 26 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
index 7bc2832..4aad679 100644
--- a/source3/modules/vfs_gpfs.c
+++ b/source3/modules/vfs_gpfs.c
@@ -97,7 +97,13 @@ static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp,
 		return -1;
 
 	if (config->leases) {
+		/*
+		 * Ensure the lease owner is root to allow
+		 * correct delivery of lease-break signals.
+		 */
+		become_root();
 		ret = set_gpfs_lease(fsp->fh->fd,leasetype);
+		unbecome_root();
 	}
 
 	if (ret < 0) {
diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c
index 02bd32a..82523f2 100644
--- a/source3/smbd/oplock_linux.c
+++ b/source3/smbd/oplock_linux.c
@@ -75,26 +75,33 @@ int linux_set_lease_sighandler(int fd)
 int linux_setlease(int fd, int leasetype)
 {
 	int ret;
+	int saved_errno;
+
+	/*
+	 * Ensure the lease owner is root to allow
+	 * correct delivery of lease-break signals.
+	 */
+
+	become_root();
 
 	/* First set the signal handler. */
 	if (linux_set_lease_sighandler(fd) == -1) {
-		return -1;
+		saved_errno = errno;
+		ret = -1;
+		goto out;
 	}
 	ret = fcntl(fd, F_SETLEASE, leasetype);
-	if (ret == -1 && errno == EACCES) {
-		set_effective_capability(LEASE_CAPABILITY);
-		/*
-		 * Bug 8974 - work around Linux kernel bug
-		 * https://bugzilla.kernel.org/show_bug.cgi?id=43336.
-		 * "fcntl(F_SETLEASE) resets signal number when
-		 *  called multiple times"
-		 */
-		if (linux_set_lease_sighandler(fd) == -1) {
-			return -1;
-		}
-		ret = fcntl(fd, F_SETLEASE, leasetype);
+	if (ret == -1) {
+		saved_errno = errno;
 	}
 
+  out:
+
+	unbecome_root();
+
+	if (ret == -1) {
+		errno = saved_errno;
+	}
 	return ret;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list