DF-0569 / fix.diff
diff --git a/sys/net/ipfw3_nat/ip_fw3_nat.c b/sys/net/ipfw3_nat/ip_fw3_nat.c --- a/sys/net/ipfw3_nat/ip_fw3_nat.c +++ b/sys/net/ipfw3_nat/ip_fw3_nat.c @@ -201,18 +201,18 @@ switch (ip->ip_p) { case IPPROTO_TCP: old_port = &L3HDR(struct tcphdr, ip)->th_dport; - s2 = alias->tcp_in[*old_port - ALIAS_BEGIN]; + s2 = alias->tcp_in[ntohs(*old_port) - ALIAS_BEGIN]; csum = &L3HDR(struct tcphdr, ip)->th_sum; break; case IPPROTO_UDP: old_port = &L3HDR(struct udphdr, ip)->uh_dport; - s2 = alias->udp_in[*old_port - ALIAS_BEGIN]; + s2 = alias->udp_in[ntohs(*old_port) - ALIAS_BEGIN]; csum = &L3HDR(struct udphdr, ip)->uh_sum; udp = 1; break; case IPPROTO_ICMP: old_port = &L3HDR(struct icmp, ip)->icmp_id; - s2 = alias->icmp_in[*old_port]; + s2 = alias->icmp_in[ntohs(*old_port)]; csum = &L3HDR(struct icmp, ip)->icmp_cksum; break; default: @@ -323,7 +323,7 @@ s2->alias_addr = htonl(args->f_id.src_ip); s2->alias_port = *old_port; - alias->icmp_in[s->alias_port] = s2; + alias->icmp_in[ntohs(s->alias_port)] = s2; break; default : goto oops; @@ -420,9 +420,9 @@ s2->timestamp = s->timestamp; if (ip->ip_p == IPPROTO_TCP) { - alias->tcp_in[s->alias_port - ALIAS_BEGIN] = s2; + alias->tcp_in[ntohs(s->alias_port) - ALIAS_BEGIN] = s2; } else { - alias->udp_in[s->alias_port - ALIAS_BEGIN] = s2; + alias->udp_in[ntohs(s->alias_port) - ALIAS_BEGIN] = s2; } } } @@ -718,9 +718,9 @@ } s2 = msg->state; if (msg->proto == IPPROTO_TCP) { - alias->tcp_in[msg->alias_port - ALIAS_BEGIN] = s2; + alias->tcp_in[ntohs(msg->alias_port) - ALIAS_BEGIN] = s2; } else { - alias->udp_in[msg->alias_port - ALIAS_BEGIN] = s2; + alias->udp_in[ntohs(msg->alias_port) - ALIAS_BEGIN] = s2; } } |