Re: [UDP6]: Restore sk_filter optimisation
From: Mitsuru Chinen <hidden>
Date: 2007-10-29 06:33:48
Hello Herbert,
Let me ask a question about this patch.
After this patch was applied, 2 of the protocol stack behaviors were
changed when it receives a UDP datagram with broken checksum:
1. udp6InDatagrams is incremented instead of udpInErrors
2. In userland, recvfrom() replies an error with EAGAIN.
recvfrom() wasn't aware of such a packet before.
Are these changes intentional?
Best Regards,
----
Mitsuru Chinen [off-list ref]
On Tue, 6 Mar 2007 12:20:10 +1100
Herbert Xu [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi Dave: [UDP6]: Restore sk_filter optimisation This reverts the changeset [IPV6]: UDPv6 checksum. We always need to check UDPv6 checksum because it is mandatory. The sk_filter optimisation has nothing to do whether we verify the checksum. It simply postpones it to the point when the user calls recv or poll. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} [off-list ref] Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt --diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 0ad4719..4474480 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c@@ -279,8 +279,10 @@ int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb) } } - if (udp_lib_checksum_complete(skb)) - goto drop; + if (sk->sk_filter) { + if (udp_lib_checksum_complete(skb)) + goto drop; + } if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) { /* Note that an ENOMEM error is charged twice */