FreeBSD 11.1-RELEASE: Kernel panic in ipv6_output() via tcp6_usr_connect()

Viktor Dukhovni freebsd at dukhovni.org
Mon Nov 6 14:53:20 UTC 2017



> On Nov 6, 2017, at 6:28 AM, Andrey V. Elsukov <bu7cher at yandex.ru> wrote:
> 
>> Reverting the rule on a running system back to "ip", still yields
>> no panics, but I am now running a different 11.1 kernel built from
>> SVN with my "stf" patch.  So it is sadly not quite clear where the
>> problem was, my original configuration, the older kernel, something
>> else?
> 
> I think it is the right assumption, that IPv6 packet got corrupted by
> nat44 and then ip6_output() is confused by incorrect packet, especially
> wrong packet length may lead to fragmentation and due to the discrepancy
> between ip6_plen and m_pkthdr.len ip6_fragment() creates wrong fragments
> chain.
> 
> I think the following patch should be enough to fix the problem:
> 
> Index: sys/netpfil/ipfw/ip_fw2.c
> ===================================================================
> --- sys/netpfil/ipfw/ip_fw2.c	(revision 325354)
> +++ sys/netpfil/ipfw/ip_fw2.c	(working copy)
> @@ -2563,7 +2563,7 @@ do {								\
> 			case O_NAT:
> 				l = 0;          /* exit inner loop */
> 				done = 1;       /* exit outer loop */
> - 				if (!IPFW_NAT_LOADED) {
> +				if (!is_ipv4 || !IPFW_NAT_LOADED) {
> 				    retval = IP_FW_DENY;
> 				    break;
> 				}
> 
> 

Would this cause the packet to be denied, or passed through without
nat?  Presumably, I would then have to have "ip4" and not "ip" as
"ip6" would then be denied by the "nat" rule.  Right?

Any comments on my message (and patch) with subject:

   [Patch] The 6to4 stf0 interface flapping in/out of tentative in FreeBSD 11

How do I get this addressed by the maintainer of stf?

-- 
	Viktor.



More information about the freebsd-net mailing list