diff options
author | Aubrey.Li <aubreylee@gmail.com> | 2007-04-17 21:40:20 +0200 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-17 22:13:26 +0200 |
commit | 5e7d7fa57323dfb48fb09464cf4542daa7ce8a72 (patch) | |
tree | 608dee7ca9e99458e3f6ad799e23e607322e95a1 /net/core/netpoll.c | |
parent | [KEY]: Fix conversion between IPSEC_MODE_xxx and XFRM_MODE_xxx. (diff) | |
download | linux-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/netpoll.c')
-rw-r--r-- | net/core/netpoll.c | 7 |
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; |