The branch, master has been updated via d40f57321a1 WHATSNEW: Document changes for "kernel share modes" via 079e706e171 docs-xml: Update manpage for "kernel share modes" option via 54fe40836ba loadparm: Set default of "kernel share modes" to "no" via c2d6284a033 wscript: Remove config check for LOCK_MAND via b2b7f9e658d system: Remove kernel_flock via e1398c34b2c vfs_default: Return ENOTSUP for sharemodes flock call via 5488a242fbd vfs_gpfs: Remove call to kernel_flock via facd6e01bd3 vfs_gpfs: Update comment in vfs_gpfs_kernel_flock via 0fa4766e43a smbd: Update comment explaining streams and file-system sharemodes from ce2bc74dce4 bootstrap: Remove last references to Ubuntu 16.04
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit d40f57321a12c28840cdd2efd3e0e8f21855b6d4 Author: Christof Schmitt <c...@samba.org> Date: Tue Sep 14 10:32:58 2021 -0700 WHATSNEW: Document changes for "kernel share modes" Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Wed Sep 15 00:04:47 UTC 2021 on sn-devel-184 commit 079e706e1711cae82db913fa46fa9efe7afafc97 Author: Christof Schmitt <c...@samba.org> Date: Mon Sep 13 13:25:09 2021 -0700 docs-xml: Update manpage for "kernel share modes" option Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 54fe40836ba1813166ab9f060255139dd37d697a Author: Christof Schmitt <c...@samba.org> Date: Tue Sep 14 09:54:22 2021 -0700 loadparm: Set default of "kernel share modes" to "no" selftest: Remove knownfail for smb2.lock.replay_smb3_specification_durable With the changed default for "kernel share modes", this test can now acquire durable handles and succeed. Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit c2d6284a033da3984cc13a85c862489c78fb7739 Author: Christof Schmitt <c...@samba.org> Date: Mon Sep 13 13:14:49 2021 -0700 wscript: Remove config check for LOCK_MAND The define set from this check is no longer needed. Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit b2b7f9e658d80f8e193c4d1e266783b1f02a6012 Author: Christof Schmitt <c...@samba.org> Date: Mon Sep 13 13:13:44 2021 -0700 system: Remove kernel_flock LOCK_MAND will be deprecated in the Linux kernel, so stop using this feature and remove the kernel_flock function. Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit e1398c34b2c24b76b30fdde8417b871d53825a36 Author: Christof Schmitt <c...@samba.org> Date: Tue Sep 14 09:49:16 2021 -0700 vfs_default: Return ENOTSUP for sharemodes flock call Remove the call to kernel_flock, as this function will be deleted. Have the function return ENOTSUP to indicate that this is not supported by default (without a file-system specific VFS module). Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 5488a242fbd6d7123a9cb3297c0cf71acbb9d523 Author: Christof Schmitt <c...@samba.org> Date: Mon Sep 13 13:00:03 2021 -0700 vfs_gpfs: Remove call to kernel_flock The function kernel_flock will be deleted. Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit facd6e01bd3b932a6bf33c71bbb590a8be51aa30 Author: Christof Schmitt <c...@samba.org> Date: Mon Sep 13 12:16:20 2021 -0700 vfs_gpfs: Update comment in vfs_gpfs_kernel_flock The function kernel_flock will be deleted, drop the reference to it. Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 0fa4766e43a5e302a4152f370315ce2f73293cac Author: Christof Schmitt <c...@samba.org> Date: Mon Sep 13 12:01:01 2021 -0700 smbd: Update comment explaining streams and file-system sharemodes The function kernel_flock will be deleted, drop the reference to it. Signed-off-by: Christof Schmitt <c...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> ----------------------------------------------------------------------- Summary of changes: WHATSNEW.txt | 11 ++++++++ docs-xml/smbdotconf/locking/kernelsharemodes.xml | 15 ++++++----- lib/param/loadparm.c | 2 +- selftest/knownfail | 1 - source3/lib/system.c | 33 ------------------------ source3/modules/vfs_default.c | 6 ++--- source3/modules/vfs_gpfs.c | 4 +-- source3/param/loadparm.c | 2 +- source3/smbd/open.c | 8 +++--- source3/wscript | 15 ----------- 10 files changed, 28 insertions(+), 69 deletions(-) Changeset truncated at 500 lines: diff --git a/WHATSNEW.txt b/WHATSNEW.txt index fe9eff8ba59..b585e2e20a1 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -33,12 +33,23 @@ installed in /var/lib/samba/private/certs. REMOVED FEATURES ================ +No longer using Linux mandatory locks for sharemodes +==================================================== + +smbd mapped sharemodes to Linux mandatory locks. This code in the Linux kernel +was broken for a long time, and is planned to be removed with Linux 5.15. This +Samba release removes the usage of mandatory locks for sharemodes and the +"kernel share modes" config parameter is changed to default to "no". The Samba +VFS interface is kept, so that file-system specific VFS modules can still use +private calls for enforcing sharemodes. + smb.conf changes ================ Parameter Name Description Default -------------- ----------- ------- + kernel share modes New default No KNOWN ISSUES diff --git a/docs-xml/smbdotconf/locking/kernelsharemodes.xml b/docs-xml/smbdotconf/locking/kernelsharemodes.xml index 134fffc2714..d06f7924aad 100644 --- a/docs-xml/smbdotconf/locking/kernelsharemodes.xml +++ b/docs-xml/smbdotconf/locking/kernelsharemodes.xml @@ -5,14 +5,14 @@ <description> <para> This parameter controls whether SMB share modes are - translated into UNIX flocks. + translated into file system specific sharemode calls. </para> <para> Kernel share modes provide a minimal level of interoperability with local UNIX processes and NFS operations by preventing - access with flocks corresponding to the SMB share modes. - Generally, it is very desirable to leave this enabled. + access corresponding to the SMB share modes. This requires + a file system specific VFS module with proper support. </para> <para> @@ -21,11 +21,12 @@ </para> <para> - This parameter defaults to <constant>yes</constant> and - is translated to a no-op on systems that do not have the - necessary kernel flock support. + This parameter defaults to <constant>no</constant>. Setting + it to <constant>yes</constant> requires a file system module + that supports file system sharemodes, otherwise attempts to + access files will fail with a sharing violation. </para> </description> -<value type="default">yes</value> +<value type="default">no</value> </samba:parameter> diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index 59e749d9d46..2eac1ba7c38 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -2808,7 +2808,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "ldap page size", "1000"); - lpcfg_do_global_parameter(lp_ctx, "kernel share modes", "yes"); + lpcfg_do_global_parameter(lp_ctx, "kernel share modes", "no"); lpcfg_do_global_parameter(lp_ctx, "strict locking", "Auto"); diff --git a/selftest/knownfail b/selftest/knownfail index 9f362c02b47..73ae7142563 100644 --- a/selftest/knownfail +++ b/selftest/knownfail @@ -215,7 +215,6 @@ ^samba3.smb2.session.*reauth5 # some special anonymous checks? ^samba3.smb2.compound.interim2 # wrong return code (STATUS_CANCELLED) ^samba3.smb2.compound.aio.interim2 # wrong return code (STATUS_CANCELLED) -^samba3.smb2.lock.replay_smb3_specification_durable\(nt4_dc\) # Requires durable handles ^samba3.smb2.lock.*replay_broken_windows # This tests the windows behaviour ^samba3.smb2.lease.statopen3 ^samba3.smb2.lease.unlink # we currently do not downgrade RH lease to R after unlink diff --git a/source3/lib/system.c b/source3/lib/system.c index a14fc51ca63..671fc2760a0 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -471,39 +471,6 @@ int sys_fallocate(int fd, uint32_t mode, off_t offset, off_t len) #endif /* HAVE_LINUX_FALLOCATE */ } -#ifdef HAVE_KERNEL_SHARE_MODES -#ifndef LOCK_MAND -#define LOCK_MAND 32 /* This is a mandatory flock */ -#define LOCK_READ 64 /* ... Which allows concurrent read operations */ -#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */ -#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */ -#endif -#endif - -/******************************************************************* - A flock() wrapper that will perform the kernel flock. -********************************************************************/ - -void kernel_flock(int fd, uint32_t share_access, uint32_t access_mask) -{ -#ifdef HAVE_KERNEL_SHARE_MODES - int kernel_mode = 0; - if (share_access == FILE_SHARE_WRITE) { - kernel_mode = LOCK_MAND|LOCK_WRITE; - } else if (share_access == FILE_SHARE_READ) { - kernel_mode = LOCK_MAND|LOCK_READ; - } else if (share_access == FILE_SHARE_NONE) { - kernel_mode = LOCK_MAND; - } - if (kernel_mode) { - flock(fd, kernel_mode); - } -#endif - ; -} - - - /******************************************************************* An fdopendir wrapper. ********************************************************************/ diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 5701e37d5ec..2687d175880 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -3018,10 +3018,8 @@ static bool vfswrap_lock(vfs_handle_struct *handle, files_struct *fsp, int op, o static int vfswrap_kernel_flock(vfs_handle_struct *handle, files_struct *fsp, uint32_t share_access, uint32_t access_mask) { - START_PROFILE(syscall_kernel_flock); - kernel_flock(fsp_get_io_fd(fsp), share_access, access_mask); - END_PROFILE(syscall_kernel_flock); - return 0; + errno = ENOTSUP; + return -1; } static int vfswrap_fcntl(vfs_handle_struct *handle, files_struct *fsp, int cmd, diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 4d1cfa6075a..0225cdc6e0f 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -176,7 +176,7 @@ static int vfs_gpfs_kernel_flock(vfs_handle_struct *handle, files_struct *fsp, /* * A named stream fsp will have the basefile open in the fsp * fd, so lacking a distinct fd for the stream we have to skip - * kernel_flock and set_gpfs_sharemode for stream. + * set_gpfs_sharemode for stream. */ if (is_named_stream(fsp->fsp_name)) { DBG_NOTICE("Not requesting GPFS sharemode on stream: %s/%s\n", @@ -185,8 +185,6 @@ static int vfs_gpfs_kernel_flock(vfs_handle_struct *handle, files_struct *fsp, return 0; } - kernel_flock(fsp_get_io_fd(fsp), share_access, access_mask); - ret = set_gpfs_sharemode(fsp, access_mask, share_access); END_PROFILE(syscall_kernel_flock); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index b003e54c038..6c9830563c3 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -246,7 +246,7 @@ static const struct loadparm_service _sDefault = .map_readonly = MAP_READONLY_NO, .directory_name_cache_size = 100, .server_smb_encrypt = SMB_ENCRYPTION_DEFAULT, - .kernel_share_modes = true, + .kernel_share_modes = false, .durable_handles = true, .check_parent_directory_delete_on_close = false, .param_opt = NULL, diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 968dd8ecb00..9c146177897 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -4054,10 +4054,10 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, * Beware: streams implementing VFS modules may * implement streams in a way that fsp will have the * basefile open in the fsp fd, so lacking a distinct - * fd for the stream kernel_flock will apply on the - * basefile which is wrong. The actual check is - * deferred to the VFS module implementing the - * kernel_flock call. + * fd for the stream the file-system sharemode will + * apply on the basefile which is wrong. The actual + * check is deferred to the VFS module implementing + * the file-system sharemode call. */ ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, share_access, access_mask); if(ret_flock == -1 ){ diff --git a/source3/wscript b/source3/wscript index 87dbc00f191..5662c588776 100644 --- a/source3/wscript +++ b/source3/wscript @@ -165,21 +165,6 @@ long ret = splice(0,0,1,0,400,SPLICE_F_MOVE); if conf.CHECK_DECLS('F_SETLEASE', headers='linux/fcntl.h', reverse=True): conf.DEFINE('HAVE_KERNEL_OPLOCKS_LINUX', 1) - # Check for kernel share modes - conf.CHECK_CODE(''' -#include <sys/types.h> -#include <fcntl.h> -#include <signal.h> -#include <sys/file.h> -#ifndef LOCK_MAND -#define LOCK_MAND 32 -#define LOCK_READ 64 -#endif -main() { - exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0); -}''', 'HAVE_KERNEL_SHARE_MODES', addmain=False, execute=True, - msg="Checking for kernel share modes") - # check for fam libs samba_fam_libs=None check_for_fam=False -- Samba Shared Repository