All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vladislav.yasevich@hp.com>
To: Zhu Yi <yi.zhu@intel.com>
Cc: netdev@vger.kernel.org, Sridhar Samudrala <sri@us.ibm.com>
Subject: Re: [PATCH V2 5/7] sctp: use limited socket backlog
Date: Wed, 03 Mar 2010 09:10:24 -0500	[thread overview]
Message-ID: <4B8E6DD0.1020603@hp.com> (raw)
In-Reply-To: <1267605389-7369-5-git-send-email-yi.zhu@intel.com>



Zhu Yi wrote:
> Make sctp adapt to the limited socket backlog change.
> 
> Cc: Vlad Yasevich <vladislav.yasevich@hp.com>
> Cc: Sridhar Samudrala <sri@us.ibm.com>
> Signed-off-by: Zhu Yi <yi.zhu@intel.com>
> ---
>  net/sctp/input.c |   12 ++++++++----
>  1 files changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/net/sctp/input.c b/net/sctp/input.c
> index c0c973e..20e69c3 100644
> --- a/net/sctp/input.c
> +++ b/net/sctp/input.c
> @@ -75,7 +75,7 @@ static struct sctp_association *__sctp_lookup_association(
>  					const union sctp_addr *peer,
>  					struct sctp_transport **pt);
>  
> -static void sctp_add_backlog(struct sock *sk, struct sk_buff *skb);
> +static int sctp_add_backlog(struct sock *sk, struct sk_buff *skb);
>  
>  
>  /* Calculate the SCTP checksum of an SCTP packet.  */
> @@ -265,8 +265,12 @@ int sctp_rcv(struct sk_buff *skb)
>  	}
>  
>  	if (sock_owned_by_user(sk)) {
> +		if (sctp_add_backlog(sk, skb)) {
> +			sctp_bh_unlock_sock(sk);
> +			sctp_chunk_free(chunk);
> +			goto discard_release;
> +		}

I think this will result in a double-free of the skb, because sctp_chunk_free
attempts to free the skb that's been assigned to the chunk.  You can set the skb
to NULL to get around that.

>  		SCTP_INC_STATS_BH(SCTP_MIB_IN_PKT_BACKLOG);
> -		sctp_add_backlog(sk, skb);
>  	} else {
>  		SCTP_INC_STATS_BH(SCTP_MIB_IN_PKT_SOFTIRQ);
>  		sctp_inq_push(&chunk->rcvr->inqueue, chunk);
> @@ -362,7 +366,7 @@ done:
>  	return 0;
>  }
>  
> -static void sctp_add_backlog(struct sock *sk, struct sk_buff *skb)
> +static int sctp_add_backlog(struct sock *sk, struct sk_buff *skb)
>  {
>  	struct sctp_chunk *chunk = SCTP_INPUT_CB(skb)->chunk;
>  	struct sctp_ep_common *rcvr = chunk->rcvr;
> @@ -377,7 +381,7 @@ static void sctp_add_backlog(struct sock *sk, struct sk_buff *skb)
>  	else
>  		BUG();
>  
> -	sk_add_backlog(sk, skb);
> +	return sk_add_backlog_limited(sk, skb);
>  }

You also leak the ref counts here since now it's possible to not add a packet to
 the backlog queue.  That means you'll take refs, but never drop them because
the receive routing will never run.

-vlad
>  
>  /* Handle icmp frag needed error. */

  parent reply	other threads:[~2010-03-03 14:10 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-03  8:36 [PATCH V2 1/7] net: add limit for socket backlog Zhu Yi
2010-03-03  8:36 ` [PATCH V2 2/7] tcp: use limited " Zhu Yi
2010-03-03  8:36   ` [PATCH V2 3/7] udp: " Zhu Yi
     [not found]     ` <1267605389-7369-4-git-send-email-yi.zhu@intel.com>
2010-03-03  8:36       ` [PATCH V2 5/7] sctp: " Zhu Yi
2010-03-03  8:36         ` [PATCH V2 6/7] tipc: " Zhu Yi
2010-03-03  8:36           ` [PATCH V2 7/7] net: backlog functions rename Zhu Yi
2010-03-03 14:10         ` Vlad Yasevich [this message]
2010-03-03 14:19           ` [PATCH V2 5/7] sctp: use limited socket backlog Zhu, Yi
2010-03-03 14:36             ` Vlad Yasevich
2010-03-04  2:00               ` Zhu, Yi
2010-03-03  8:53   ` [PATCH V2 2/7] tcp: " Eric Dumazet
2010-03-03  9:06     ` Zhu Yi
2010-03-03 10:07       ` Eric Dumazet
2010-03-03 14:12         ` Zhu, Yi
2010-03-03 14:31           ` Eric Dumazet
2010-03-04  5:21             ` Zhu, Yi
2010-03-04  6:00               ` Eric Dumazet
2010-03-04 11:04                 ` Zhu, Yi
2010-03-04 14:56                   ` Eric Dumazet
2010-03-03  8:54 ` [PATCH V2 1/7] net: add limit for " David Miller
2010-03-03  9:01   ` Zhu Yi

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=4B8E6DD0.1020603@hp.com \
    --to=vladislav.yasevich@hp.com \
    --cc=netdev@vger.kernel.org \
    --cc=sri@us.ibm.com \
    --cc=yi.zhu@intel.com \
    /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.