summaryrefslogtreecommitdiff
path: root/fs/ksmbd
diff options
context:
space:
mode:
authorMarios Makassikis <mmakassikis@freebox.fr>2021-07-27 09:24:51 +0900
committerNamjae Jeon <namjae.jeon@samsung.com>2021-07-27 09:26:24 +0900
commitd337a44e429e6de23ed3d73fcb81ec44f7b05522 (patch)
treeb01314c85343e171a8cdd4c35b226cf493494b07 /fs/ksmbd
parent1d904eaf3f99565bdeffbed359e44dd88efbef02 (diff)
ksmbd: Return STATUS_OBJECT_PATH_NOT_FOUND if smb2_creat() returns ENOENT
Both Windows 10's SMB server and samba return STATUS_OBJECT_PATH_NOT_FOUND when trying to access a nonexistent path. This fixes Windows 10 File History tool. The latter relies on the server returning STATUS_OBJECT_PATH_NOT_FOUND to figure out what part of the target path needs to be created. Returning STATUS_OBJECT_NAME_INVALID will make it stop and display an error to the user. Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/ksmbd')
-rw-r--r--fs/ksmbd/smb2pdu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 7e6e3d8c20e8..1b1f34d9d1a0 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -2768,8 +2768,13 @@ int smb2_open(struct ksmbd_work *work)
if (!file_present) {
rc = smb2_creat(work, &path, name, open_flags, posix_mode,
req->CreateOptions & FILE_DIRECTORY_FILE_LE);
- if (rc)
+ if (rc) {
+ if (rc == -ENOENT) {
+ rc = -EIO;
+ rsp->hdr.Status = STATUS_OBJECT_PATH_NOT_FOUND;
+ }
goto err_out;
+ }
created = true;
user_ns = mnt_user_ns(path.mnt);