aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netpfil/ipfilter/netinet/ip_nat.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/netpfil/ipfilter/netinet/ip_nat.c b/sys/netpfil/ipfilter/netinet/ip_nat.c
index b7f5eb94b1dd..c8125c10e3f0 100644
--- a/sys/netpfil/ipfilter/netinet/ip_nat.c
+++ b/sys/netpfil/ipfilter/netinet/ip_nat.c
@@ -5154,9 +5154,12 @@ ipf_nat_out(fr_info_t *fin, nat_t *nat, int natadd, u_32_t nflags)
s2 += ntohs(ip->ip_len);
CALC_SUMD(s1, s2, sumd);
- uh = (udphdr_t *)(ip + 1);
- uh->uh_ulen += fin->fin_plen;
- uh->uh_ulen = htons(uh->uh_ulen);
+ if (ip->ip_p == IPPROTO_UDP) {
+ uh = (udphdr_t *)(ip + 1);
+ uh->uh_ulen = ntohs(uh->uh_ulen);
+ uh->uh_ulen += fin->fin_plen;
+ uh->uh_ulen = htons(uh->uh_ulen);
+ }
#if !defined(_KERNEL) || SOLARIS || \
defined(BRIDGE_IPF) || defined(__FreeBSD__)
ipf_fix_outcksum(0, &ip->ip_sum, sumd, 0);