diff options
| author | Gael Blivet <gael.blivet@gmail.com> | 2026-07-07 11:55:04 +0200 |
|---|---|---|
| committer | Namjae Jeon <linkinjeon@kernel.org> | 2026-08-17 15:00:34 +0900 |
| commit | 9870bbb55a2fc70a3d0945f85c4ff8a4fbb99a8e (patch) | |
| tree | 8f5fe35ecfcd2b1a2f5fe071e9c3b5e5f799cbbb | |
| parent | a9417bb1889e3c869f4c059a67efa8899d8df3f5 (diff) | |
| download | linux-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.c | 8 |
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: |
