[PATCH] Remove file system sharemode before calling unlink
Jeremy Allison
jra at samba.org
Thu Jan 11 23:34:47 UTC 2018
On Wed, Jan 10, 2018 at 04:38:29PM -0700, Christof Schmitt via samba-technical wrote:
> From 05c37256483d961a4448239292022ec38d8ff188 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Wed, 10 Jan 2018 15:56:08 -0700
> Subject: [PATCH] Remove file system sharemode before calling unlink
>
> GPFS implements the DENY_DELETE sharemode, which prevents unlink() from
> deleting the file.. This causes the problem that deleting a file through
> "delete on close" fails, as the code in close.c first calls unlink() and
> only later removes the file system sharemode.
>
> Fix this by removing the file system sharemode before calling unlink().
Hmmm. This opens up a race that could cause the unlink
to then fail, if a non-smbd process (i.e. one that ignores
the tdb share mode lock) opens the path and sets a sharemode
between the SMB_VFS_KERNEL_FLOCK() and SMB_VFS_UNLINK()
calls, but I guess failing the unlink in that case is
also the right thing to do.
RB+ and I'll push if I can ever get an autobuild working
again :-).
Jeremy.
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
> source3/smbd/close.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/source3/smbd/close.c b/source3/smbd/close.c
> index 095feec..2f6cc4f 100644
> --- a/source3/smbd/close.c
> +++ b/source3/smbd/close.c
> @@ -446,6 +446,22 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
> }
> }
>
> + if (fsp->kernel_share_modes_taken) {
> + int ret_flock;
> +
> + /*
> + * A file system sharemode could block the unlink;
> + * remove filesystem sharemodes first.
> + */
> + ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, 0, 0);
> + if (ret_flock == -1) {
> + DBG_INFO("removing kernel flock for %s failed: %s\n",
> + fsp_str_dbg(fsp), strerror(errno));
> + }
> +
> + fsp->kernel_share_modes_taken = false;
> + }
> +
>
> if (SMB_VFS_UNLINK(conn, fsp->fsp_name) != 0) {
> /*
> --
> 1.8.3.1
>
More information about the samba-technical
mailing list