summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGael Blivet <gael.blivet@gmail.com>2026-07-07 11:55:04 +0200
committerNamjae Jeon <linkinjeon@kernel.org>2026-08-17 15:00:34 +0900
commit9870bbb55a2fc70a3d0945f85c4ff8a4fbb99a8e (patch)
tree8f5fe35ecfcd2b1a2f5fe071e9c3b5e5f799cbbb
parenta9417bb1889e3c869f4c059a67efa8899d8df3f5 (diff)
downloadlinux-9870bbb55a2fc70a3d0945f85c4ff8a4fbb99a8e.tar.gz
linux-9870bbb55a2fc70a3d0945f85c4ff8a4fbb99a8e.zip
ksmbd: return STATUS_OBJECT_NAME_NOT_FOUND for unknown IPC pipe names
create_smb2_pipe() maps ksmbd_session_rpc_open() failing with -EINVAL (pipe name not recognized/supported) to STATUS_INVALID_PARAMETER. macOS Time Machine's backupd treats STATUS_INVALID_PARAMETER on a pipe open as a fatal error and aborts the backup immediately, whereas STATUS_OBJECT_NAME_NOT_FOUND is handled gracefully -- the client just treats that particular pipe as unavailable and continues. Assisted-by: Claude:claude-sonnet-5 Signed-off-by: Gael Blivet <gael.blivet@gmail.com> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
-rw-r--r--fs/smb/server/smb2pdu.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
index f737ba5cd82c..06197275956d 100644
--- a/fs/smb/server/smb2pdu.c
+++ b/fs/smb/server/smb2pdu.c
@@ -2640,7 +2640,13 @@ static noinline int create_smb2_pipe(struct ksmbd_work *work)
out:
switch (err) {
case -EINVAL:
- rsp->hdr.Status = STATUS_INVALID_PARAMETER;
+ /*
+ * Unknown pipe name: return STATUS_OBJECT_NAME_NOT_FOUND so
+ * macOS clients skip it gracefully. STATUS_INVALID_PARAMETER
+ * causes macOS Time Machine to abort the backup immediately
+ * (confirmed in ksmbd issue #502 / namjaejeon/ksmbd).
+ */
+ rsp->hdr.Status = STATUS_OBJECT_NAME_NOT_FOUND;
break;
case -ENOSPC:
case -ENOMEM: