ACK: [PATCH][OEM-5.6] net/x25: prevent a couple of overflows

Stefan Bader stefan.bader at canonical.com
Fri Apr 9 12:18:58 UTC 2021


On 08.04.21 22:14, Tim Gardner wrote:
> From: Dan Carpenter <dan.carpenter at oracle.com>
> 
> CVE-2020-35519
> 
> The .x25_addr[] address comes from the user and is not necessarily
> NUL terminated.  This leads to a couple problems.  The first problem is
> that the strlen() in x25_bind() can read beyond the end of the buffer.
> 
> The second problem is more subtle and could result in memory corruption.
> The call tree is:
>    x25_connect()
>    --> x25_write_internal()
>        --> x25_addr_aton()
> 
> The .x25_addr[] buffers are copied to the "addresses" buffer from
> x25_write_internal() so it will lead to stack corruption.
> 
> Verify that the strings are NUL terminated and return -EINVAL if they
> are not.
> 
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Fixes: a9288525d2ae ("X25: Dont let x25_bind use addresses containing characters")
> Reported-by: "kiyin(尹亮)" <kiyin at tencent.com>
> Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>
> Acked-by: Martin Schiller <ms at dev.tdt.de>
> Link: https://lore.kernel.org/r/X8ZeAKm8FnFpN//B@mwanda
> Signed-off-by: Jakub Kicinski <kuba at kernel.org>
> (cherry picked from commit 6ee50c8e262a0f0693dad264c3c99e30e6442a56)
> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
>   net/x25/af_x25.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
> index d5b09bbff375..20b9e128a87d 100644
> --- a/net/x25/af_x25.c
> +++ b/net/x25/af_x25.c
> @@ -681,7 +681,8 @@ static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
>   	int len, i, rc = 0;
>   
>   	if (addr_len != sizeof(struct sockaddr_x25) ||
> -	    addr->sx25_family != AF_X25) {
> +	    addr->sx25_family != AF_X25 ||
> +	    strnlen(addr->sx25_addr.x25_addr, X25_ADDR_LEN) == X25_ADDR_LEN) {
>   		rc = -EINVAL;
>   		goto out;
>   	}
> @@ -775,7 +776,8 @@ static int x25_connect(struct socket *sock, struct sockaddr *uaddr,
>   
>   	rc = -EINVAL;
>   	if (addr_len != sizeof(struct sockaddr_x25) ||
> -	    addr->sx25_family != AF_X25)
> +	    addr->sx25_family != AF_X25 ||
> +	    strnlen(addr->sx25_addr.x25_addr, X25_ADDR_LEN) == X25_ADDR_LEN)
>   		goto out;
>   
>   	rc = -ENETUNREACH;
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20210409/1a48849f/attachment.sig>


More information about the kernel-team mailing list