In the fd_close() fsp->fsp_flags.fstat_before_close code path.
If this is a stream and delete-on-close was set, the
backing object (an xattr from streams_xattr) might
already be deleted so fstat() fails with
NT_STATUS_NOT_FOUND. So if fsp refers to a stream we
ignore the error and only bail for normal files where
an fstat() should still work. NB. We cannot use
fsp_is_alternate_stream(fsp) for this as the base_fsp
has already been closed at this point and so the value
fsp_is_alternate_stream() checks for is already NULL.
Remove knownfail.
Bug: https://bugzilla.samba.org/show_bug.cgi?id=15487
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Tue Oct 10 09:39:27 UTC 2023 on atb-devel-224
(cherry picked from commit
633a3ee6894cc1d05b44dbe47a278202803d9b21)
Autobuild-User(v4-19-test): Jule Anger <janger@samba.org>
Autobuild-Date(v4-19-test): Mon Nov 13 10:02:51 UTC 2023 on atb-devel-224
if (fsp->fsp_flags.fstat_before_close) {
status = vfs_stat_fsp(fsp);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ /*
+ * If this is a stream and delete-on-close was set, the
+ * backing object (an xattr from streams_xattr) might
+ * already be deleted so fstat() fails with
+ * NT_STATUS_NOT_FOUND. So if fsp refers to a stream we
+ * ignore the error and only bail for normal files where
+ * an fstat() should still work. NB. We cannot use
+ * fsp_is_alternate_stream(fsp) for this as the base_fsp
+ * has already been closed at this point and so the value
+ * fsp_is_alternate_stream() checks for is already NULL.
+ */
+ if (fsp->fsp_name->stream_name == NULL) {
+ return status;
+ }
}
}