All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vladislav.yasevich@hp.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, linux-sctp@vger.kernel.org
Subject: Re: [PATCH]: SCTP length validation.
Date: Sat, 21 Jun 2008 15:55:19 +0000	[thread overview]
Message-ID: <485D2467.7020300@hp.com> (raw)
In-Reply-To: <20080620.221205.183623344.davem@davemloft.net>

David Miller wrote:
> I just checked in the following SCTP bug fix to net-2.6 and will make
> sure it gets into -stable as well.
> 
> sctp: Make sure N * sizeof(union sctp_addr) does not overflow.
> 
> As noticed by Gabriel Campana, the kmalloc() length arg
> passed in by sctp_getsockopt_local_addrs_old() can overflow
> if ->addr_num is large enough.
> 
> Therefore, enforce an appropriate limit.

Hi David

The same vulnerability also exists in sctp_getsockopt_peer_addrs_old().
It's a bit more difficult to trigger since there is a dependency on
the peer being multihomed as well, but it's still possible to cause the
overwrite.

-vlad

> 
> Signed-off-by: David S. Miller <davem@davemloft.net>
> ---
>  net/sctp/socket.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index e7e3baf..0dbcde6 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -4401,7 +4401,9 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
>  	if (copy_from_user(&getaddrs, optval, len))
>  		return -EFAULT;
>  
> -	if (getaddrs.addr_num <= 0) return -EINVAL;
> +	if (getaddrs.addr_num <= 0 ||
> +	    getaddrs.addr_num >= (INT_MAX / sizeof(union sctp_addr)))
> +		return -EINVAL;
>  	/*
>  	 *  For UDP-style sockets, id specifies the association to query.
>  	 *  If the id field is set to the value '0' then the locally bound


WARNING: multiple messages have this Message-ID (diff)
From: Vlad Yasevich <vladislav.yasevich@hp.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, linux-sctp@vger.kernel.org
Subject: Re: [PATCH]: SCTP length validation.
Date: Sat, 21 Jun 2008 11:55:19 -0400	[thread overview]
Message-ID: <485D2467.7020300@hp.com> (raw)
In-Reply-To: <20080620.221205.183623344.davem@davemloft.net>

David Miller wrote:
> I just checked in the following SCTP bug fix to net-2.6 and will make
> sure it gets into -stable as well.
> 
> sctp: Make sure N * sizeof(union sctp_addr) does not overflow.
> 
> As noticed by Gabriel Campana, the kmalloc() length arg
> passed in by sctp_getsockopt_local_addrs_old() can overflow
> if ->addr_num is large enough.
> 
> Therefore, enforce an appropriate limit.

Hi David

The same vulnerability also exists in sctp_getsockopt_peer_addrs_old().
It's a bit more difficult to trigger since there is a dependency on
the peer being multihomed as well, but it's still possible to cause the
overwrite.

-vlad

> 
> Signed-off-by: David S. Miller <davem@davemloft.net>
> ---
>  net/sctp/socket.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index e7e3baf..0dbcde6 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -4401,7 +4401,9 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
>  	if (copy_from_user(&getaddrs, optval, len))
>  		return -EFAULT;
>  
> -	if (getaddrs.addr_num <= 0) return -EINVAL;
> +	if (getaddrs.addr_num <= 0 ||
> +	    getaddrs.addr_num >= (INT_MAX / sizeof(union sctp_addr)))
> +		return -EINVAL;
>  	/*
>  	 *  For UDP-style sockets, id specifies the association to query.
>  	 *  If the id field is set to the value '0' then the locally bound


  reply	other threads:[~2008-06-21 15:55 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-21  5:12 [PATCH]: SCTP length validation David Miller
2008-06-21  5:12 ` David Miller
2008-06-21 15:55 ` Vlad Yasevich [this message]
2008-06-21 15:55   ` Vlad Yasevich
2008-06-22 19:32   ` David Miller
2008-06-22 19:32     ` David Miller
2008-06-23 15:59     ` Vlad Yasevich
2008-06-23 15:59       ` Vlad Yasevich
2008-06-23 21:42       ` David Miller
2008-06-23 21:42         ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=485D2467.7020300@hp.com \
    --to=vladislav.yasevich@hp.com \
    --cc=davem@davemloft.net \
    --cc=linux-sctp@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.