]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Sep 2024 17:24:04 +0000 (19:24 +0200)
[ Upstream commit f6bd41280a44dcc2e0a25ed72617d25f586974a7 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/smb/server/smb2pdu.c

index 4ac6068c50ccb5edf62a006c8bde28554e4cb132..c527050bc981eb452eda35c2cc0c938abda5b081 100644 (file)
@@ -5601,6 +5601,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");
@@ -5619,6 +5624,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);
@@ -5628,6 +5634,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;