Thread (23 messages) 23 messages, 3 authors, 2015-10-28

Re: [PATCH net v2 2/4] ipv4: add defensive check for CHECKSUM_PARTIAL skbs in ip_fragment

From: Hannes Frederic Sowa <hidden>
Date: 2015-10-27 19:15:27

Hi Sergei,

On Tue, Oct 27, 2015, at 20:01, Sergei Shtylyov wrote:
On 10/27/2015 06:02 PM, Hannes Frederic Sowa wrote:
quoted
CHECKSUM_PARTIAL skbs should never arrive in ip_fragment. If we get one
of those warn about them once and handle them gracefully by recalculating
the checksum.

Cc: Eric Dumazet <edumazet@google.com>
Cc: Vlad Yasevich <redacted>
Cc: Benjamin Coddington <redacted>
Cc: Tom Herbert <redacted>
Signed-off-by: Hannes Frederic Sowa <redacted>
---
  net/ipv4/ip_output.c | 8 +++++---
  1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 0b02417..3f94a3b 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -533,6 +533,11 @@ int ip_do_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,

  	dev = rt->dst.dev;

+	/* for offloaded checksums cleanup checksum before fragmentation */
+	if (WARN_ON_ONCE(skb->ip_summed == CHECKSUM_PARTIAL) &&
+	    (err = skb_checksum_help(skb)))
    scripts/checkpatch.pl shou;d have complained about using = in the
    *if* 
expression.
I know and I ignored it deliberately because I found it nicer this way.
I made sure gcc does not complain by using extra braces around the
assignment.

Bye,
Hannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help