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. */
next prev 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.