From: Jarek Poplawski <jarkao2@gmail.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>,
Herbert Xu <herbert@gondor.apana.org.au>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Kernel Testers List <kernel-testers@vger.kernel.org>,
Maciej Rutecki <maciej.rutecki@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
netdev@vger.kernel.org
Subject: Re: [Bug #16626] Machine hangs with EIP at skb_copy_and_csum_dev
Date: Sat, 4 Sep 2010 22:34:29 +0200 [thread overview]
Message-ID: <20100904203429.GA4891@del.dom.local> (raw)
In-Reply-To: <1283338251.2556.124.camel@edumazet-laptop>
Eric Dumazet wrote, On 09/01/2010 12:50 PM:
> [PATCH] gro: fix different skb headrooms
>
> packets entering GRO might have different headrooms, even for a given
> flow (because of implementation details in drivers, like copybreak).
> We cant force drivers to deliver packets with a fixed headroom.
>
> 1) fix skb_segment()
>
> skb_segment() makes the false assumption headrooms of fragments are same
> than the head. When CHECKSUM_PARTIAL is used, this can give csum_start
> errors, and crash later in skb_copy_and_csum_dev()
>
> 2) allocate a minimal skb for head of frag_list
>
> skb_gro_receive() uses netdev_alloc_skb(headroom + skb_gro_offset(p)) to
> allocate a fresh skb. This adds NET_SKB_PAD to a padding already
> provided by netdevice, depending on various things, like copybreak.
>
> Use alloc_skb() to allocate an exact padding, to reduce cache line
> needs:
> NET_SKB_PAD + NET_IP_ALIGN
>
> bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626
>
> Many thanks to Plamen Petrov, testing many debugging patches !
> With help of Jarek Poplawski.
>
> Reported-by: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> CC: Jarek Poplawski <jarkao2@gmail.com>
> ---
> patch against linux-2.6 current tree
>
> net/core/skbuff.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
...
> @@ -2702,8 +2706,8 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
> } else if (skb_gro_len(p) != pinfo->gso_size)
> return -E2BIG;
>
> - headroom = skb_headroom(p);
> - nskb = netdev_alloc_skb(p->dev, headroom + skb_gro_offset(p));
> + headroom = NET_SKB_PAD + NET_IP_ALIGN;
> + nskb = alloc_skb(headroom + skb_gro_offset(p), GFP_ATOMIC);
> if (unlikely(!nskb))
> return -ENOMEM;
Hi again,
Just had a second look, and unless I miss something...
Plamen, could you test this patch, too? (Without removing the previous
one.)
Thanks,
Jarek P.
------------------->
[PATCH] gro: Re-fix different skb headrooms
The patch: "gro: fix different skb headrooms" in its part:
"2) allocate a minimal skb for head of frag_list" is buggy. The copied
skb has p->data set at the ip header at the moment, and skb_gro_offset
is the length of ip + tcp headers. So, after the change the length of
mac header is skipped. Later skb_set_mac_header() sets it into the
NET_SKB_PAD area (if it's long enough) and ip header is misaligned at
NET_SKB_PAD + NET_IP_ALIGN offset. There is no reason to assume the
original skb was wrongly allocated, so let's copy it as it was.
bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626
fixes commit: 3d3be4333fdf6faa080947b331a6a19bce1a4f57
Reported-by: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
CC: Eric Dumazet <eric.dumazet@gmail.com>
---
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 26396ff..c83b421 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2706,7 +2706,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
} else if (skb_gro_len(p) != pinfo->gso_size)
return -E2BIG;
- headroom = NET_SKB_PAD + NET_IP_ALIGN;
+ headroom = skb_headroom(p);
nskb = alloc_skb(headroom + skb_gro_offset(p), GFP_ATOMIC);
if (unlikely(!nskb))
return -ENOMEM;
WARNING: multiple messages have this Message-ID (diff)
From: Jarek Poplawski <jarkao2@gmail.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>,
Herbert Xu <herbert@gondor.hengli.com.au>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Kernel Testers List <kernel-testers@vger.kernel.org>,
Maciej Rutecki <maciej.rutecki@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
netdev@vger.kernel.org
Subject: Re: [Bug #16626] Machine hangs with EIP at skb_copy_and_csum_dev
Date: Sat, 4 Sep 2010 22:34:29 +0200 [thread overview]
Message-ID: <20100904203429.GA4891@del.dom.local> (raw)
In-Reply-To: <1283338251.2556.124.camel@edumazet-laptop>
Eric Dumazet wrote, On 09/01/2010 12:50 PM:
> [PATCH] gro: fix different skb headrooms
>
> packets entering GRO might have different headrooms, even for a given
> flow (because of implementation details in drivers, like copybreak).
> We cant force drivers to deliver packets with a fixed headroom.
>
> 1) fix skb_segment()
>
> skb_segment() makes the false assumption headrooms of fragments are same
> than the head. When CHECKSUM_PARTIAL is used, this can give csum_start
> errors, and crash later in skb_copy_and_csum_dev()
>
> 2) allocate a minimal skb for head of frag_list
>
> skb_gro_receive() uses netdev_alloc_skb(headroom + skb_gro_offset(p)) to
> allocate a fresh skb. This adds NET_SKB_PAD to a padding already
> provided by netdevice, depending on various things, like copybreak.
>
> Use alloc_skb() to allocate an exact padding, to reduce cache line
> needs:
> NET_SKB_PAD + NET_IP_ALIGN
>
> bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626
>
> Many thanks to Plamen Petrov, testing many debugging patches !
> With help of Jarek Poplawski.
>
> Reported-by: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> CC: Jarek Poplawski <jarkao2@gmail.com>
> ---
> patch against linux-2.6 current tree
>
> net/core/skbuff.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
...
> @@ -2702,8 +2706,8 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
> } else if (skb_gro_len(p) != pinfo->gso_size)
> return -E2BIG;
>
> - headroom = skb_headroom(p);
> - nskb = netdev_alloc_skb(p->dev, headroom + skb_gro_offset(p));
> + headroom = NET_SKB_PAD + NET_IP_ALIGN;
> + nskb = alloc_skb(headroom + skb_gro_offset(p), GFP_ATOMIC);
> if (unlikely(!nskb))
> return -ENOMEM;
Hi again,
Just had a second look, and unless I miss something...
Plamen, could you test this patch, too? (Without removing the previous
one.)
Thanks,
Jarek P.
------------------->
[PATCH] gro: Re-fix different skb headrooms
The patch: "gro: fix different skb headrooms" in its part:
"2) allocate a minimal skb for head of frag_list" is buggy. The copied
skb has p->data set at the ip header at the moment, and skb_gro_offset
is the length of ip + tcp headers. So, after the change the length of
mac header is skipped. Later skb_set_mac_header() sets it into the
NET_SKB_PAD area (if it's long enough) and ip header is misaligned at
NET_SKB_PAD + NET_IP_ALIGN offset. There is no reason to assume the
original skb was wrongly allocated, so let's copy it as it was.
bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626
fixes commit: 3d3be4333fdf6faa080947b331a6a19bce1a4f57
Reported-by: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
CC: Eric Dumazet <eric.dumazet@gmail.com>
---
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 26396ff..c83b421 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2706,7 +2706,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
} else if (skb_gro_len(p) != pinfo->gso_size)
return -E2BIG;
- headroom = NET_SKB_PAD + NET_IP_ALIGN;
+ headroom = skb_headroom(p);
nskb = alloc_skb(headroom + skb_gro_offset(p), GFP_ATOMIC);
if (unlikely(!nskb))
return -ENOMEM;
next prev parent reply other threads:[~2010-09-04 20:34 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-29 22:24 2.6.36-rc3: Reported regressions from 2.6.35 Rafael J. Wysocki
2010-08-29 22:24 ` [Bug #16626] Machine hangs with EIP at skb_copy_and_csum_dev Rafael J. Wysocki
[not found] ` <courier.4C7C99F2.00001F74@fs.ru.acad.bg>
[not found] ` <courier.4C7C99F2.00001F74-Xdw7EbNJKi3354cJYj5R/Q@public.gmane.org>
2010-08-31 19:26 ` Jarek Poplawski
2010-08-31 19:26 ` Jarek Poplawski
2010-09-01 10:50 ` Eric Dumazet
2010-09-01 10:50 ` Eric Dumazet
2010-09-01 11:20 ` Jarek Poplawski
2010-09-01 11:20 ` Jarek Poplawski
[not found] ` <20100901112026.GA9468-8HppEYmqbBCE+EvaaNYduQ@public.gmane.org>
2010-09-01 13:57 ` Eric Dumazet
2010-09-01 13:57 ` Eric Dumazet
2010-09-01 15:05 ` Jarek Poplawski
2010-09-01 15:05 ` Jarek Poplawski
2010-09-02 1:23 ` David Miller
2010-09-02 1:23 ` David Miller
2010-09-03 8:00 ` Plamen Petrov
2010-09-03 8:00 ` Plamen Petrov
2010-09-03 9:06 ` Jarek Poplawski
2010-09-03 9:06 ` Jarek Poplawski
2010-09-03 8:30 ` Herbert Xu
2010-09-03 8:30 ` Herbert Xu
2010-09-04 20:34 ` Jarek Poplawski [this message]
2010-09-04 20:34 ` Jarek Poplawski
[not found] ` <20100904203429.GA4891-qLhEM4ewh5CNj9Bq2fkWzw@public.gmane.org>
2010-09-05 7:49 ` Eric Dumazet
2010-09-05 7:49 ` Eric Dumazet
2010-09-08 4:57 ` Plamen Petrov
2010-09-08 4:57 ` Plamen Petrov
2010-09-08 6:20 ` Jarek Poplawski
2010-09-08 6:20 ` Jarek Poplawski
2010-09-08 17:32 ` David Miller
2010-09-08 17:32 ` David Miller
[not found] ` <20100908.103256.112592448.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2010-09-08 20:21 ` Rafael J. Wysocki
2010-09-08 20:21 ` Rafael J. Wysocki
[not found] ` <201009082221.16356.rjw-KKrjLPT3xs0@public.gmane.org>
2010-09-12 6:55 ` Plamen Petrov
2010-09-12 6:55 ` Plamen Petrov
[not found] ` <4C8C7957.7080207-s6OjJRe3oxUfI6EYonfoRA@public.gmane.org>
2010-09-12 15:55 ` David Miller
2010-09-12 15:55 ` David Miller
[not found] ` <20100912.085509.193705327.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2010-09-13 6:49 ` Plamen Petrov
2010-09-13 6:49 ` Plamen Petrov
2010-09-12 17:28 ` Rafael J. Wysocki
2010-09-12 17:28 ` Rafael J. Wysocki
2018-08-29 21:39 ` Mitchell Erblich
2010-08-29 22:36 ` [Bug #16951] hackbench regression with 2.6.36-rc1 Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #16971] qla4xxx compile failure on 32-bit PowerPC: missing readq and writeq Rafael J. Wysocki
2010-08-30 8:45 ` Meelis Roos
[not found] ` <alpine.SOC.1.00.1008301145230.29117-ptEonEWSGqKptlylMvRsHA@public.gmane.org>
2010-08-30 13:46 ` Florian Mickler
2010-08-30 13:46 ` Florian Mickler
2010-08-29 22:36 ` [Bug #16961] kernel BUG at arch/x86/kvm/../../../virt/kvm/kvm_main.c:1978 Rafael J. Wysocki
2010-08-29 22:36 ` Rafael J. Wysocki
2010-08-30 8:55 ` Sergey Senozhatsky
2010-08-30 8:55 ` Sergey Senozhatsky
[not found] ` <20100830085539.GA5244-dY8u8AhHFaWtd10JCjopabkcH5ONE+aC@public.gmane.org>
2010-08-30 13:44 ` Florian Mickler
2010-08-30 13:44 ` Florian Mickler
2010-08-30 17:38 ` Rafael J. Wysocki
2010-08-30 17:38 ` Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #16881] [REGRESSION, Radeon-KMS] 2.6.36-rc1,2 - missing textures in 0 A.D Rafael J. Wysocki
2010-08-29 22:36 ` Rafael J. Wysocki
2010-08-30 9:54 ` trapDoor
2010-08-30 9:54 ` trapDoor
[not found] ` <AANLkTikpoH-_od-SL3=Q7a=xbsraE4rYGicx7mmS92Cw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-08-30 13:39 ` Florian Mickler
2010-08-30 13:39 ` Florian Mickler
[not found] ` <20100830153953.1e5abc71-mGsOIKOveelVRbCss4o9kg@public.gmane.org>
2010-08-30 14:45 ` trapDoor
2010-08-30 14:45 ` trapDoor
2010-08-29 22:36 ` [Bug #17021] [REGRESSION] [2.6.36-rc1] [DRM INTEL] [drm:intel_calculate_wm] *ERROR* Insufficient FIFO for plane, expect flickering: entries required = 36, available = 28 Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #16629] fix BUG: using smp_processor_id() in preemptible code (resend) Rafael J. Wysocki
2010-08-29 22:36 ` Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17061] 2.6.36-rc1 on zaurus: bluetooth regression Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17151] i915: 2.6.36-rc2 hoses my Intel display Rafael J. Wysocki
2010-08-30 18:59 ` Jonathan Corbet
[not found] ` <20100830125941.6549eb4d-X4aBRu1Q+avR7s880joybQ@public.gmane.org>
2010-08-30 20:42 ` Rafael J. Wysocki
2010-08-30 20:42 ` Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17041] 2.6.36-rc1 hangs during XFS barrier test for / Rafael J. Wysocki
2010-08-30 4:36 ` Torsten Kaiser
2010-08-30 4:36 ` Torsten Kaiser
[not found] ` <AANLkTikzDgHsPsUQMdb87R8dG61CBBekxBfhbuguLEPX-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-08-30 9:27 ` Florian Mickler
2010-08-30 9:27 ` Florian Mickler
2010-08-30 17:40 ` Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17131] WARN with 3c905 boomerang NIC Rafael J. Wysocki
2010-09-06 5:50 ` Florian Mickler
2010-09-06 5:50 ` Florian Mickler
[not found] ` <20100906075007.5797f524-mGsOIKOveelVRbCss4o9kg@public.gmane.org>
2010-09-06 10:30 ` Doug Nazar
2010-09-06 10:30 ` Doug Nazar
[not found] ` <4C84C2CE.4080905-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2010-09-06 11:00 ` Florian Mickler
2010-09-06 11:00 ` Florian Mickler
2010-08-29 22:36 ` [Bug #17321] i386 WARNING: at kernel/softirq.c:143 _local_bh_enable_ip+0x2f/0x7e Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17311] 2.6.36-rc2-git4 - INFO: possible circular locking dependency detected Rafael J. Wysocki
2010-08-29 22:36 ` Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17301] i915: 2.6.36-rc2 wrong resolution on gdm start Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17331] BUG: scheduling while atomic Rafael J. Wysocki
2010-08-29 22:36 ` [Bug #17341] kdump regression compared to v2.6.35 Rafael J. Wysocki
2010-08-29 22:36 ` Rafael J. Wysocki
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=20100904203429.GA4891@del.dom.local \
--to=jarkao2@gmail.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=herbert@gondor.apana.org.au \
--cc=kernel-testers@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.rutecki@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pvp-lsts@fs.uni-ruse.bg \
--cc=rjw@sisk.pl \
/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.