From: David Miller <davem@davemloft.net>
To: yi.zhu@intel.com
Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com
Subject: Re: [PATCH V2] net: add accounting for socket backlog
Date: Fri, 26 Feb 2010 04:05:36 -0800 (PST) [thread overview]
Message-ID: <20100226.040536.247057194.davem@davemloft.net> (raw)
In-Reply-To: <1267176464-426-1-git-send-email-yi.zhu@intel.com>
From: Zhu Yi <yi.zhu@intel.com>
Date: Fri, 26 Feb 2010 17:27:44 +0800
> We got system OOM while running some UDP netperf testing on the loopback
> device. The case is multiple senders sent stream UDP packets to a single
> receiver via loopback on local host. Of course, the receiver is not able
> to handle all the packets in time. But we surprisingly found that these
> packets were not discarded due to the receiver's sk->sk_rcvbuf limit.
> Instead, they are kept queuing to sk->sk_backlog and finally ate up all
> the memory. We believe this is a secure hole that a none privileged user
> can crash the system.
>
> The root cause for this problem is, when the receiver is doing
> __release_sock() (i.e. after userspace recv, kernel udp_recvmsg ->
> skb_free_datagram_locked -> release_sock), it moves skbs from backlog to
> sk_receive_queue with the softirq enabled. In the above case, multiple
> busy senders will almost make it an endless loop. The skbs in the
> backlog end up eat all the system memory.
>
> The patch fixed this problem by adding accounting for the socket
> backlog. So that the backlog size can be restricted by protocol's choice
> (i.e. UDP).
>
> Reported-by: Alex Shi <alex.shi@intel.com>
> Cc: David Miller <davem@davemloft.net>
> Cc: Eric Dumazet <eric.dumazet@gmail.com>
> Signed-off-by: Zhu Yi <yi.zhu@intel.com>
So remind me why TCP, or any other non-UDP protocol, won't
intrinsically have this problem too?
It seems pretty trivial to do with any protocol, especially remotely,
with a packet generator. The code in TCP, for example, which queues
to the backlog, doesn't care about sequence numbers or anything like
that.
So you could spray a machine with the same TCP frame over and over
again, as fast as possible, as long as it matches the socket identity.
And in this way fill up the backlog endlessly and OOM the system.
next prev parent reply other threads:[~2010-02-26 12:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-26 9:27 [PATCH V2] net: add accounting for socket backlog Zhu Yi
2010-02-26 12:05 ` David Miller [this message]
2010-03-01 2:08 ` Zhu Yi
2010-03-01 2:10 ` David Miller
2010-02-28 5:31 ` Eric Dumazet
2010-03-01 11:43 ` Eric Dumazet
2010-03-02 2:34 ` 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=20100226.040536.247057194.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).