]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb/server: fix return value of smb2_ioctl()
authorChenXiaoSong <chenxiaosong@kylinos.cn>
Fri, 17 Oct 2025 10:46:10 +0000 (18:46 +0800)
committerSteve French <stfrench@microsoft.com>
Mon, 1 Dec 2025 03:11:43 +0000 (21:11 -0600)
__process_request() will not print error messages if smb2_ioctl()
always returns 0.

Fix this by returning the correct value at the end of function.

Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/smb2pdu.c

index a3b7b648227ac0982d2085b673c117c493c89001..2e6f3d96d3e6573f5ea1b0bfc3769c8b6ebb1b7d 100644 (file)
@@ -8154,7 +8154,7 @@ int smb2_ioctl(struct ksmbd_work *work)
                id = req->VolatileFileId;
 
        if (req->Flags != cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL)) {
-               rsp->hdr.Status = STATUS_NOT_SUPPORTED;
+               ret = -EOPNOTSUPP;
                goto out;
        }
 
@@ -8174,8 +8174,9 @@ int smb2_ioctl(struct ksmbd_work *work)
        case FSCTL_DFS_GET_REFERRALS:
        case FSCTL_DFS_GET_REFERRALS_EX:
                /* Not support DFS yet */
+               ret = -EOPNOTSUPP;
                rsp->hdr.Status = STATUS_FS_DRIVER_REQUIRED;
-               goto out;
+               goto out2;
        case FSCTL_CREATE_OR_GET_OBJECT_ID:
        {
                struct file_object_buf_type1_ioctl_rsp *obj_buf;
@@ -8465,8 +8466,10 @@ out:
                rsp->hdr.Status = STATUS_BUFFER_TOO_SMALL;
        else if (ret < 0 || rsp->hdr.Status == 0)
                rsp->hdr.Status = STATUS_INVALID_PARAMETER;
+
+out2:
        smb2_set_err_rsp(work);
-       return 0;
+       return ret;
 }
 
 /**