]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ksmbd: override fsids for smb2_query_info()
authorNamjae Jeon <linkinjeon@kernel.org>
Sun, 4 Aug 2024 23:57:03 +0000 (08:57 +0900)
committerSteve French <stfrench@microsoft.com>
Fri, 9 Aug 2024 03:54:09 +0000 (22:54 -0500)
Sangsoo reported that a DAC denial error occurred when accessing
files through the ksmbd thread. This patch override fsids for
smb2_query_info().

Reported-by: Sangsoo Lee <constant.lee@samsung.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/smb2pdu.c

index 54154d36ea2f81005736a36cd68388055948dc14..2df1354288e68a2c5a2faae0eecb164c67a6a0d3 100644 (file)
@@ -5596,6 +5596,11 @@ int smb2_query_info(struct ksmbd_work *work)
 
        ksmbd_debug(SMB, "GOT query info request\n");
 
+       if (ksmbd_override_fsids(work)) {
+               rc = -ENOMEM;
+               goto err_out;
+       }
+
        switch (req->InfoType) {
        case SMB2_O_INFO_FILE:
                ksmbd_debug(SMB, "GOT SMB2_O_INFO_FILE\n");
@@ -5614,6 +5619,7 @@ int smb2_query_info(struct ksmbd_work *work)
                            req->InfoType);
                rc = -EOPNOTSUPP;
        }
+       ksmbd_revert_fsids(work);
 
        if (!rc) {
                rsp->StructureSize = cpu_to_le16(9);
@@ -5623,6 +5629,7 @@ int smb2_query_info(struct ksmbd_work *work)
                                        le32_to_cpu(rsp->OutputBufferLength));
        }
 
+err_out:
        if (rc < 0) {
                if (rc == -EACCES)
                        rsp->hdr.Status = STATUS_ACCESS_DENIED;