From: Eric Dumazet <eric.dumazet@gmail.com>
To: Vijay Subramanian <subramanian.vijay@gmail.com>
Cc: enh <enh@google.com>,
Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>,
netdev@vger.kernel.org
Subject: Re: listen(2) backlog changes in or around Linux 3.1?
Date: Fri, 19 Oct 2012 13:39:35 +0200 [thread overview]
Message-ID: <1350646775.2293.497.camel@edumazet-glaptop> (raw)
In-Reply-To: <1350642562.2293.411.camel@edumazet-glaptop>
On Fri, 2012-10-19 at 12:29 +0200, Eric Dumazet wrote:
> On Fri, 2012-10-19 at 02:14 -0700, Vijay Subramanian wrote:
> > > diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
> > > index ef998b0..0404926 100644
> > > --- a/net/ipv4/tcp_ipv4.c
> > > +++ b/net/ipv4/tcp_ipv4.c
> > > @@ -1507,7 +1507,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
> > > * clogging syn queue with openreqs with exponentially increasing
> > > * timeout.
> > > */
> > > - if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
> > > + if (__sk_acceptq_is_full(sk, inet_csk_reqsk_queue_young(sk)))
> > > goto drop;
> > >
> >
> > For what its worth, I think the changes make sense. But is there any
> > reason to exclude old request_socks in the call to
> > __sk_acceptq_is_full().?
> > as in
> > if (__sk_acceptq_is_full(sk, inet_csk_reqsk_queue_len(sk)))
> > goto drop;
> >
> > I am not sure why the current code looks only at young request_socks.
> > Thanks,
> > Vijay
>
> Old requests are assumed to be unlikely to complete (SYN attack).
>
> young requests are assumed to have a reasonable chance to complete.
>
> Note that we drop the SYN packet, so its not a 'final' decision.
>
> Some other OSes send RST in case the listener queue is full
> (I tested FreeBSD 9.0 this morning.)
>
> Note also we probably have a bug elsewhere :
>
> If we send a SYNACK, then receive the ACK from client, and the acceptq
> is full, we should reset the connexion. Right now we have kind of stupid
> situation, were we drop the ACK, and leave the REQ in the SYN_RECV
> state, so we retransmit SYNACKS.
>
> I am working on this part as well.
>
Well, it seems a documented feature :
tcp_abort_on_overflow - BOOLEAN
If listening service is too slow to accept new connections,
reset them. Default state is FALSE. It means that if overflow
occurred due to a burst, connection will recover. Enable this
option _only_ if you are really sure that listening daemon
cannot be tuned to accept connections faster. Enabling this
option can harm clients of your server.
next prev parent reply other threads:[~2012-10-19 11:39 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-12 23:40 listen(2) backlog changes in or around Linux 3.1? enh
2012-10-15 17:12 ` Venkat Venkatsubra
2012-10-15 17:26 ` enh
2012-10-15 21:30 ` Venkat Venkatsubra
2012-10-16 23:31 ` enh
2012-10-18 16:00 ` Venkat Venkatsubra
2012-10-18 16:53 ` Venkat Venkatsubra
2012-10-18 17:20 ` enh
2012-10-19 6:02 ` Vijay Subramanian
2012-10-19 6:50 ` Eric Dumazet
2012-10-19 8:06 ` Eric Dumazet
2012-10-19 9:14 ` Vijay Subramanian
2012-10-19 10:29 ` Eric Dumazet
2012-10-19 11:39 ` Eric Dumazet [this message]
2012-10-22 20:00 ` Vijay Subramanian
2012-10-22 20:08 ` Eric Dumazet
2012-10-22 22:11 ` Vijay Subramanian
2012-10-25 22:50 ` Eric Dumazet
2012-10-25 23:16 ` Vijay Subramanian
2012-10-18 16:54 ` Eric Dumazet
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=1350646775.2293.497.camel@edumazet-glaptop \
--to=eric.dumazet@gmail.com \
--cc=enh@google.com \
--cc=netdev@vger.kernel.org \
--cc=subramanian.vijay@gmail.com \
--cc=venkat.x.venkatsubra@oracle.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox