mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-21 19:35:23 -04:00
Rename of open files in SMB2+ has been broken for a very long time, resulting in data loss as the CIFS client would fail the rename(2) call with -ENOENT and then removing the target file. Fix this by implementing ->rename_pending_delete() for SMB2+, which will rename busy files to random filenames (e.g. silly rename) during unlink(2) or rename(2), and then marking them to delete-on-close. Besides, introduce a FIND_WR_NO_PENDING_DELETE flag to prevent open(2) from reusing open handles that had been marked as delete pending. Handle it in cifs_get_readable_path() as well. Reported-by: Jean-Baptiste Denis <jbdenis@pasteur.fr> Closes: https://marc.info/?i=16aeb380-30d4-4551-9134-4e7d1dc833c0@pasteur.fr Reviewed-by: David Howells <dhowells@redhat.com> Cc: stable@vger.kernel.org Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org> Cc: Frank Sorenson <sorenson@redhat.com> Cc: Olga Kornievskaia <okorniev@redhat.com> Cc: Benjamin Coddington <bcodding@redhat.com> Cc: Scott Mayhew <smayhew@redhat.com> Cc: linux-cifs@vger.kernel.org Signed-off-by: Steve French <stfrench@microsoft.com>
50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
/* SPDX-License-Identifier: LGPL-2.1 */
|
|
/*
|
|
*
|
|
* Definitions for various global variables and structures
|
|
*
|
|
* Copyright (C) International Business Machines Corp., 2002, 2011
|
|
* Etersoft, 2012
|
|
* Author(s): Steve French (sfrench@us.ibm.com)
|
|
* Jeremy Allison (jra@samba.org)
|
|
* Pavel Shilovsky (pshilovsky@samba.org) 2012
|
|
*
|
|
*/
|
|
#ifndef _SMB2_GLOB_H
|
|
#define _SMB2_GLOB_H
|
|
|
|
/*
|
|
*****************************************************************
|
|
* Constants go here
|
|
*****************************************************************
|
|
*/
|
|
|
|
/*
|
|
* Identifiers for functions that use the open, operation, close pattern
|
|
* in smb2inode.c:smb2_compound_op()
|
|
*/
|
|
enum smb2_compound_ops {
|
|
SMB2_OP_SET_DELETE = 1,
|
|
SMB2_OP_SET_INFO,
|
|
SMB2_OP_QUERY_INFO,
|
|
SMB2_OP_QUERY_DIR,
|
|
SMB2_OP_MKDIR,
|
|
SMB2_OP_RENAME,
|
|
SMB2_OP_HARDLINK,
|
|
SMB2_OP_SET_EOF,
|
|
SMB2_OP_UNLINK,
|
|
SMB2_OP_POSIX_QUERY_INFO,
|
|
SMB2_OP_SET_REPARSE,
|
|
SMB2_OP_GET_REPARSE,
|
|
SMB2_OP_QUERY_WSL_EA,
|
|
SMB2_OP_OPEN_QUERY,
|
|
};
|
|
|
|
/* Used when constructing chained read requests. */
|
|
#define CHAINED_REQUEST 1
|
|
#define START_OF_CHAIN 2
|
|
#define END_OF_CHAIN 4
|
|
#define RELATED_REQUEST 8
|
|
|
|
#endif /* _SMB2_GLOB_H */
|