Commit 4204de73 authored by Namjae Jeon's avatar Namjae Jeon Committed by Wang Zhaolong
Browse files

ksmbd: fix slab-out-of-bounds in smb_strndup_from_utf16()

mainline inclusion
from mainline-v6.9-rc1
commit a80a486d72e20bd12c335bcd38b6e6f19356b0aa
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9L5E3
CVE: CVE-2024-26954

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a80a486d72e20bd12c335bcd38b6e6f19356b0aa



--------------------------------

If ->NameOffset of smb2_create_req is smaller than Buffer offset of
smb2_create_req, slab-out-of-bounds read can happen from smb2_open.
This patch set the minimum value of the name offset to the buffer offset
to validate name length of smb2_create_req().

Cc: stable@vger.kernel.org
Reported-by: default avatarXuanzhe Yu <yuxuanzhe@outlook.com>
Signed-off-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
Signed-off-by: default avatarWang Zhaolong <wangzhaolong1@huawei.com>
parent 75c81bcd
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -107,7 +107,10 @@ static int smb2_get_data_area_len(unsigned int *off, unsigned int *len,
	case SMB2_CREATE:
	{
		unsigned short int name_off =
			le16_to_cpu(((struct smb2_create_req *)hdr)->NameOffset);
			max_t(unsigned short int,
			      le16_to_cpu(((struct smb2_create_req *)hdr)->NameOffset),
			      offsetof(struct smb2_create_req, Buffer));

		unsigned short int name_len =
			le16_to_cpu(((struct smb2_create_req *)hdr)->NameLength);