Re: [PATCH] ksmbd: Fix buffer length check in fsctl_validate_negotiate_info()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Acked-by: Hyunchul Lee <hyc.lee@xxxxxxxxx>

2021년 10월 29일 (금) 오전 4:02, Marios Makassikis <mmakassikis@xxxxxxxxxx>님이 작성:
>
> The validate_negotiate_info_req struct definition includes an extra
> field to access the data coming after the header. This causes the check
> in fsctl_validate_negotiate_info() to count the first element of the
> array twice. This in turn makes some valid requests fail, depending on
> whether they include padding or not.
>
> Fixes: f7db8fd03a4b ("ksmbd: add validation in smb2_ioctl")
> Signed-off-by: Marios Makassikis <mmakassikis@xxxxxxxxxx>
> ---
> This causes mounts to fail on older kernels (v4.19 on debian10) when
> specifying vers=3.0.
>
>  fs/ksmbd/smb2pdu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
> index 7e448df3f847..a03b53df3f04 100644
> --- a/fs/ksmbd/smb2pdu.c
> +++ b/fs/ksmbd/smb2pdu.c
> @@ -7312,7 +7312,7 @@ static int fsctl_validate_negotiate_info(struct ksmbd_conn *conn,
>         int ret = 0;
>         int dialect;
>
> -       if (in_buf_len < sizeof(struct validate_negotiate_info_req) +
> +       if (in_buf_len < offsetof(struct validate_negotiate_info_req, Dialects) +
>                         le16_to_cpu(neg_req->DialectCount) * sizeof(__le16))
>                 return -EINVAL;
>
> --
> 2.25.1
>


-- 
Thanks,
Hyunchul




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux