aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-12-05 01:51:58 -0800
committerDavid S. Miller <davem@davemloft.net>2008-01-28 14:56:32 -0800
commit27ab2568649d5ba6c5a20212079b7c4f6da4ca0d (patch)
tree19bb85e73d7deb0adf40386af3117c2f397b653d /net/ipv4
parentc8fecf2242a0ab7230210665986b8ef915e1ae9e (diff)
downloadkernel_samsung_aries-27ab2568649d5ba6c5a20212079b7c4f6da4ca0d.zip
kernel_samsung_aries-27ab2568649d5ba6c5a20212079b7c4f6da4ca0d.tar.gz
kernel_samsung_aries-27ab2568649d5ba6c5a20212079b7c4f6da4ca0d.tar.bz2
[UDP]: Avoid repeated counting of checksum errors due to peeking
Currently it is possible for two processes to peek on the same socket and end up incrementing the error counter twice for the same packet. This patch fixes it by making skb_kill_datagram return whether it succeeded in unlinking the packet and only incrementing the counter if it did. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/udp.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index d0283b7..f50de5d 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -899,9 +899,8 @@ out:
return err;
csum_copy_err:
- UDP_INC_STATS_USER(UDP_MIB_INERRORS, is_udplite);
-
- skb_kill_datagram(sk, skb, flags);
+ if (!skb_kill_datagram(sk, skb, flags))
+ UDP_INC_STATS_USER(UDP_MIB_INERRORS, is_udplite);
if (noblock)
return -EAGAIN;