aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv6/netfilter/ip6t_NPT.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/ipv6/netfilter/ip6t_NPT.c b/net/ipv6/netfilter/ip6t_NPT.c
index 7302b0b7b642..68788c84aee7 100644
--- a/net/ipv6/netfilter/ip6t_NPT.c
+++ b/net/ipv6/netfilter/ip6t_NPT.c
@@ -30,7 +30,7 @@ static int ip6t_npt_checkentry(const struct xt_tgchk_param *par)
30 (__force __wsum)npt->dst_pfx.in6.s6_addr16[i]); 30 (__force __wsum)npt->dst_pfx.in6.s6_addr16[i]);
31 } 31 }
32 32
33 npt->adjustment = (__force __sum16) csum_sub(src_sum, dst_sum); 33 npt->adjustment = ~csum_fold(csum_sub(src_sum, dst_sum));
34 return 0; 34 return 0;
35} 35}
36 36
@@ -66,8 +66,8 @@ static bool ip6t_npt_map_pfx(const struct ip6t_npt_tginfo *npt,
66 return false; 66 return false;
67 } 67 }
68 68
69 sum = (__force __sum16) csum_add((__force __wsum)addr->s6_addr16[idx], 69 sum = ~csum_fold(csum_add(csum_unfold((__force __sum16)addr->s6_addr16[idx]),
70 npt->adjustment); 70 csum_unfold(npt->adjustment)));
71 if (sum == CSUM_MANGLED_0) 71 if (sum == CSUM_MANGLED_0)
72 sum = 0; 72 sum = 0;
73 *(__force __sum16 *)&addr->s6_addr16[idx] = sum; 73 *(__force __sum16 *)&addr->s6_addr16[idx] = sum;