summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_fw2.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/ip_fw2.c')
-rw-r--r--sys/netinet/ip_fw2.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/netinet/ip_fw2.c b/sys/netinet/ip_fw2.c
index 1e2b84e..5715587 100644
--- a/sys/netinet/ip_fw2.c
+++ b/sys/netinet/ip_fw2.c
@@ -1136,9 +1136,15 @@ static void
send_reject(struct ip_fw_args *args, int code, int offset, int ip_len)
{
- if (code != ICMP_REJECT_RST) /* Send an ICMP unreach */
+ if (code != ICMP_REJECT_RST) { /* Send an ICMP unreach */
+ /* We need the IP header in host order for icmp_error(). */
+ if (args->eh != NULL) {
+ struct ip *ip = mtod(args->m, struct ip *);
+ ip->ip_len = ntohs(ip->ip_len);
+ ip->ip_off = ntohs(ip->ip_off);
+ }
icmp_error(args->m, ICMP_UNREACH, code, 0L, 0);
- else if (offset == 0 && args->f_id.proto == IPPROTO_TCP) {
+ } else if (offset == 0 && args->f_id.proto == IPPROTO_TCP) {
struct tcphdr *const tcp =
L3HDR(struct tcphdr, mtod(args->m, struct ip *));
if ( (tcp->th_flags & TH_RST) == 0)
OpenPOWER on IntegriCloud