On Fri, Oct 28, 2016 at 06:10:53PM +0800, Xin Long wrote:
> Prior to this patch, it used a local variable to save the transport that is
> looked up by __sctp_lookup_association(), and didn't return it back. But in
> sctp_rcv, it is used to initialize chunk->transport. So when hitting this
> code, it was initializing chunk->transport with some random stack value
> instead.
> 
> This patch is to return the transport back through transport pointer
> that is from __sctp_rcv_lookup_harder().
> 
> Signed-off-by: Xin Long <lucien....@gmail.com>

Acked-by: Marcelo Ricardo Leitner <marcelo.leit...@gmail.com>

transport pointer in sctp_rcv() is initialized to null and there are
checks for it after this path, so this shouldn't be exploitable, just
malfunction.

> ---
>  net/sctp/input.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/net/sctp/input.c b/net/sctp/input.c
> index a2ea1d1..8e0bc58 100644
> --- a/net/sctp/input.c
> +++ b/net/sctp/input.c
> @@ -1021,7 +1021,6 @@ static struct sctp_association 
> *__sctp_rcv_init_lookup(struct net *net,
>       struct sctphdr *sh = sctp_hdr(skb);
>       union sctp_params params;
>       sctp_init_chunk_t *init;
> -     struct sctp_transport *transport;
>       struct sctp_af *af;
>  
>       /*
> @@ -1052,7 +1051,7 @@ static struct sctp_association 
> *__sctp_rcv_init_lookup(struct net *net,
>  
>               af->from_addr_param(paddr, params.addr, sh->source, 0);
>  
> -             asoc = __sctp_lookup_association(net, laddr, paddr, &transport);
> +             asoc = __sctp_lookup_association(net, laddr, paddr, transportp);
>               if (asoc)
>                       return asoc;
>       }
> -- 
> 2.1.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

Reply via email to