Author: luigi
Date: Thu Jan 7 12:00:54 2010
New Revision: 201740
URL: http://svn.freebsd.org/changeset/base/201740
Log:
check that we have an ipv4 packet before swapping ip_len and ip_off.
This should fix the handling of ipv6 packets which i broke when i
made ipfw operate on packets in network format.
Reported by: Hajimu UMEMOTO
Modified:
head/sys/netinet/ipfw/ip_fw_pfil.c
Modified: head/sys/netinet/ipfw/ip_fw_pfil.c
==============================================================================
--- head/sys/netinet/ipfw/ip_fw_pfil.c Thu Jan 7 11:54:36 2010
(r201739)
+++ head/sys/netinet/ipfw/ip_fw_pfil.c Thu Jan 7 12:00:54 2010
(r201740)
@@ -104,7 +104,8 @@ ipfw_check_hook(void *arg, struct mbuf *
int ret;
/* all the processing now uses ip_len in net format */
- SET_NET_IPLEN(mtod(*m0, struct ip *));
+ if (mtod(*m0, struct ip *)->ip_v == 4)
+ SET_NET_IPLEN(mtod(*m0, struct ip *));
/* convert dir to IPFW values */
dir = (dir == PFIL_IN) ? DIR_IN : DIR_OUT;
@@ -236,7 +237,7 @@ again:
FREE_PKT(*m0);
*m0 = NULL;
}
- if (*m0)
+ if (*m0 && mtod(*m0, struct ip *)->ip_v == 4)
SET_HOST_IPLEN(mtod(*m0, struct ip *));
return ret;
}
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"