summaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorAubrey.Li <aubreylee@gmail.com>2007-04-17 21:40:20 +0200
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-17 22:13:26 +0200
commit5e7d7fa57323dfb48fb09464cf4542daa7ce8a72 (patch)
tree608dee7ca9e99458e3f6ad799e23e607322e95a1 /net/core
parent[KEY]: Fix conversion between IPSEC_MODE_xxx and XFRM_MODE_xxx. (diff)
downloadlinux-5e7d7fa57323dfb48fb09464cf4542daa7ce8a72.tar.xz
linux-5e7d7fa57323dfb48fb09464cf4542daa7ce8a72.zip
[NET]: Fix UDP checksum issue in net poll mode.
In net poll mode, the current checksum function doesn't consider the kind of packet which is padded to reach a specific minimum length. I believe that's the problem causing my test case failed. The following patch fixed this issue. Signed-off-by: Aubrey.Li <aubreylee@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/netpoll.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index da1019451ccb..4581ece48bb2 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -471,6 +471,13 @@ int __netpoll_rx(struct sk_buff *skb)
if (skb->len < len || len < iph->ihl*4)
goto out;
+ /*
+ * Our transport medium may have padded the buffer out.
+ * Now We trim to the true length of the frame.
+ */
+ if (pskb_trim_rcsum(skb, len))
+ goto out;
+
if (iph->protocol != IPPROTO_UDP)
goto out;