Unverified Commit 411e7ef5 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files
parents b2f5c108 7b9c44ca
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -2047,15 +2047,22 @@ int smb2_tree_connect(struct ksmbd_work *work)
 * @access:		file access flags
 * @disposition:	file disposition flags
 * @may_flags:		set with MAY_ flags
 * @is_dir:		is creating open flags for directory
 *
 * Return:      file open flags
 */
static int smb2_create_open_flags(bool file_present, __le32 access,
				  __le32 disposition,
				  int *may_flags)
				  int *may_flags,
				  bool is_dir)
{
	int oflags = O_NONBLOCK | O_LARGEFILE;

	if (is_dir) {
		access &= ~FILE_WRITE_DESIRE_ACCESS_LE;
		ksmbd_debug(SMB, "Discard write access to a directory\n");
	}

	if (access & FILE_READ_DESIRED_ACCESS_LE &&
	    access & FILE_WRITE_DESIRE_ACCESS_LE) {
		oflags |= O_RDWR;
@@ -2895,7 +2902,9 @@ int smb2_open(struct ksmbd_work *work)

	open_flags = smb2_create_open_flags(file_present, daccess,
					    req->CreateDisposition,
					    &may_flags);
					    &may_flags,
		req->CreateOptions & FILE_DIRECTORY_FILE_LE ||
		(file_present && S_ISDIR(d_inode(path.dentry)->i_mode)));

	if (!test_tree_conn_flag(tcon, KSMBD_TREE_CONN_FLAG_WRITABLE)) {
		if (open_flags & O_CREAT) {