summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Rogers <linux@joshua.hu>2025-11-07 00:09:37 +0800
committerSteve French <stfrench@microsoft.com>2025-11-07 10:15:43 -0600
commit4012abe8a78fbb8869634130024266eaef7081fe (patch)
tree45dd4c2e376debf671f20d08041b2476b9338192
parentb540de9e3b4fab3b9e10f30714a6f5c1b2a50ec3 (diff)
downloadlinux-4012abe8a78fbb8869634130024266eaef7081fe.tar.gz
linux-4012abe8a78fbb8869634130024266eaef7081fe.tar.bz2
linux-4012abe8a78fbb8869634130024266eaef7081fe.zip
smb: client: validate change notify buffer before copy
SMB2_change_notify called smb2_validate_iov() but ignored the return code, then kmemdup()ed using server provided OutputBufferOffset/Length. Check the return of smb2_validate_iov() and bail out on error. Discovered with help from the ZeroPath security tooling. Signed-off-by: Joshua Rogers <linux@joshua.hu> Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org> Cc: stable@vger.kernel.org Fixes: e3e9463414f61 ("smb3: improve SMB3 change notification support") Signed-off-by: Steve French <stfrench@microsoft.com>
-rw-r--r--fs/smb/client/smb2pdu.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
index b0739a2661bf..8b4a4573e9c3 100644
--- a/fs/smb/client/smb2pdu.c
+++ b/fs/smb/client/smb2pdu.c
@@ -4054,9 +4054,12 @@ replay_again:
smb_rsp = (struct smb2_change_notify_rsp *)rsp_iov.iov_base;
- smb2_validate_iov(le16_to_cpu(smb_rsp->OutputBufferOffset),
- le32_to_cpu(smb_rsp->OutputBufferLength), &rsp_iov,
+ rc = smb2_validate_iov(le16_to_cpu(smb_rsp->OutputBufferOffset),
+ le32_to_cpu(smb_rsp->OutputBufferLength),
+ &rsp_iov,
sizeof(struct file_notify_information));
+ if (rc)
+ goto cnotify_exit;
*out_data = kmemdup((char *)smb_rsp + le16_to_cpu(smb_rsp->OutputBufferOffset),
le32_to_cpu(smb_rsp->OutputBufferLength), GFP_KERNEL);