From: David Miller <davem@davemloft.net>
To: haoki@redhat.com
Cc: herbert@gondor.apana.org.au, netdev@vger.kernel.org,
tyasui@redhat.com, mhiramat@redhat.com,
satoshi.oshima.fk@hitachi.com, billfink@mindspring.com,
andi@firstfloor.org, johnpol@2ka.mipt.ru,
shemminger@linux-foundation.org, yoshfuji@linux-ipv6.org,
yumiko.sugita.yf@hitachi.com
Subject: Re: [PATCH 1/4] [UDP]: fix send buffer check
Date: Thu, 20 Dec 2007 03:31:38 -0800 (PST) [thread overview]
Message-ID: <20071220.033138.157714241.davem@davemloft.net> (raw)
In-Reply-To: <4767328B.70601@redhat.com>
From: Hideo AOKI <haoki@redhat.com>
Date: Mon, 17 Dec 2007 21:38:03 -0500
> This patch introduces sndbuf size check before memory allocation for
> send buffer.
>
> signed-off-by: Satoshi Oshima <satoshi.oshima.fk@hitachi.com>
> signed-off-by: Hideo Aoki <haoki@redhat.com>
...
> diff -pruN net-2.6/net/ipv4/ip_output.c net-2.6-udp-take11a1-p1/net/ipv4/ip_output.c
> --- net-2.6/net/ipv4/ip_output.c 2007-12-11 10:54:55.000000000 -0500
> +++ net-2.6-udp-take11a1-p1/net/ipv4/ip_output.c 2007-12-17 14:42:31.000000000 -0500
> @@ -1004,6 +1004,11 @@ alloc_new_skb:
> frag = &skb_shinfo(skb)->frags[i];
> }
> } else if (i < MAX_SKB_FRAGS) {
> + if (atomic_read(&sk->sk_wmem_alloc) + PAGE_SIZE
> + > 2 * sk->sk_sndbuf) {
> + err = -ENOBUFS;
> + goto error;
> + }
> if (copy > PAGE_SIZE)
> copy = PAGE_SIZE;
> page = alloc_pages(sk->sk_allocation, 0);
If we are going to do this, we need to add the same check to
skb_append_datato_frags() which is invoked via ip_ufo_append_data().
We also have to be very careful in this area. One problem we had a
long time ago was that we would socket account when fragmenting an
outgoing frame. This was bogus because even if the socket had enough
space for one full sized frame, the packet send would fail because it
could not fit the space for both the original frame and the
fragmented copy of it.
This situation was cured by simply not enforcing accounting for the
fragmented copy. It is valid because after we fragment, we keep
the fragmented copy but free the original.
This doesn't apply directly to this specific patch, but it is
something to keep in mind when doing these changes.
next prev parent reply other threads:[~2007-12-20 11:31 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-18 2:33 [PATCH 0/4] [UDP]: memory accounting and limitation (take 11) Hideo AOKI
2007-12-18 2:38 ` [PATCH 1/4] [UDP]: fix send buffer check Hideo AOKI
2007-12-20 11:31 ` David Miller [this message]
2007-12-21 3:43 ` Hideo AOKI
2007-12-18 2:38 ` [PATCH 2/4] [CORE]: datagram: basic memory accounting functions Hideo AOKI
2007-12-19 3:21 ` Hideo AOKI
2007-12-20 11:43 ` David Miller
2007-12-21 4:18 ` Hideo AOKI
2007-12-21 4:31 ` David Miller
2007-12-22 0:22 ` Hideo AOKI
2007-12-18 2:38 ` [PATCH 3/4] [UDP]: add udp_mem, udp_rmem_min and udp_wmem_min Hideo AOKI
2007-12-18 2:38 ` [PATCH 4/4] [UDP]: memory accounting in IPv4 Hideo AOKI
2007-12-20 11:44 ` David Miller
2007-12-21 3:58 ` Hideo AOKI
-- strict thread matches above, loose matches on Subject: below --
2007-12-15 5:07 [PATCH 0/4] [UDP]: memory accounting and limitation (take 10) Hideo AOKI
2007-12-15 5:14 ` [PATCH 1/4] [UDP]: fix send buffer check Hideo AOKI
2007-11-28 18:48 [PATCH 0/4] UDP memory accounting and limitation (take 9) Hideo AOKI
2007-11-28 18:52 ` [PATCH 1/4] udp: fix send buffer check Hideo AOKI
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=20071220.033138.157714241.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=andi@firstfloor.org \
--cc=billfink@mindspring.com \
--cc=haoki@redhat.com \
--cc=herbert@gondor.apana.org.au \
--cc=johnpol@2ka.mipt.ru \
--cc=mhiramat@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=satoshi.oshima.fk@hitachi.com \
--cc=shemminger@linux-foundation.org \
--cc=tyasui@redhat.com \
--cc=yoshfuji@linux-ipv6.org \
--cc=yumiko.sugita.yf@hitachi.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).