[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Thu Nov 16 18:32:02 UTC 2023
The branch, master has been updated
via 4481a67c1b2 smbd: fix close order of base_fsp and stream_fsp in smb_fname_fsp_destructor()
from fe1d45cf1e9 s4:librpc: Add functions converting between bytes and UTF‐16 strings
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 4481a67c1b20549a71d6c5132b637798a09f966d
Author: Ralph Boehme <slow at samba.org>
Date: Thu Nov 16 10:50:32 2023 +0100
smbd: fix close order of base_fsp and stream_fsp in smb_fname_fsp_destructor()
VFS modules like streams_xattr use the function fsp_is_alternate_stream() on the
fsp to determine in an fsp is a stream, eg in streams_xattr_close(). If
fspo->base_fsp is arlready set to NULL, this won't work anymore.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15521
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Thu Nov 16 18:31:17 UTC 2023 on atb-devel-224
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/files.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 5da90480a67..11fee8caf24 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -408,6 +408,7 @@ static void destroy_fsp_smb_fname_link(struct fsp_smb_fname_link **_link)
static int smb_fname_fsp_destructor(struct smb_filename *smb_fname)
{
struct files_struct *fsp = smb_fname->fsp;
+ struct files_struct *base_fsp = NULL;
NTSTATUS status;
int saved_errno = errno;
@@ -419,17 +420,7 @@ static int smb_fname_fsp_destructor(struct smb_filename *smb_fname)
}
if (fsp_is_alternate_stream(fsp)) {
- struct files_struct *tmp_base_fsp = fsp->base_fsp;
-
- fsp_set_base_fsp(fsp, NULL);
-
- status = fd_close(tmp_base_fsp);
- if (!NT_STATUS_IS_OK(status)) {
- DBG_ERR("Closing fd for fsp [%s] failed: %s. "
- "Please check your filesystem!!!\n",
- fsp_str_dbg(fsp), nt_errstr(status));
- }
- file_free(NULL, tmp_base_fsp);
+ base_fsp = fsp->base_fsp;
}
status = fd_close(fsp);
@@ -441,6 +432,17 @@ static int smb_fname_fsp_destructor(struct smb_filename *smb_fname)
file_free(NULL, fsp);
smb_fname->fsp = NULL;
+ if (base_fsp != NULL) {
+ base_fsp->stream_fsp = NULL;
+ status = fd_close(base_fsp);
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_ERR("Closing fd for base_fsp [%s] failed: %s. "
+ "Please check your filesystem!!!\n",
+ fsp_str_dbg(base_fsp), nt_errstr(status));
+ }
+ file_free(NULL, base_fsp);
+ }
+
errno = saved_errno;
return 0;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list