summaryrefslogtreecommitdiffstats
path: root/sys/contrib
diff options
context:
space:
mode:
authorfjoe <fjoe@FreeBSD.org>2012-09-27 18:15:01 +0000
committerfjoe <fjoe@FreeBSD.org>2012-09-27 18:15:01 +0000
commit8f394b36947fe1d8e82fef172f40b2901063475d (patch)
treefe396017ec49f41a945f578dd9701050c79105a6 /sys/contrib
parente4c096aeb4d0889884334130ea1e8ab58ca88a8d (diff)
downloadFreeBSD-src-8f394b36947fe1d8e82fef172f40b2901063475d.zip
FreeBSD-src-8f394b36947fe1d8e82fef172f40b2901063475d.tar.gz
Fix pseudo checksum calculation.
This fixes ipfilter w/ network controllers that implement only partial rx csum offloading. PR: 106438 Obtained from: upstream MFC after: 1 week
Diffstat (limited to 'sys/contrib')
-rw-r--r--sys/contrib/ipfilter/netinet/ip_fil_freebsd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
index cac56ef..338b69a 100644
--- a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
+++ b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
@@ -1357,7 +1357,9 @@ fr_info_t *fin;
else
sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
htonl(m->m_pkthdr.csum_data +
- fin->fin_ip->ip_len + fin->fin_p));
+ fin->fin_ip->ip_len -
+ (fin->fin_ip->ip_hl << 2) +
+ fin->fin_p));
sum ^= 0xffff;
if (sum != 0) {
fin->fin_flx |= FI_BAD;
OpenPOWER on IntegriCloud