From dan@kulesh.obluda.cz  Tue Oct 21 04:40:57 2008
Return-Path: <dan@kulesh.obluda.cz>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 5F8691065676
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 21 Oct 2008 04:40:57 +0000 (UTC)
	(envelope-from dan@kulesh.obluda.cz)
Received: from kulesh.obluda.cz (kulesh.obluda.cz [193.179.199.51])
	by mx1.freebsd.org (Postfix) with ESMTP id AC5088FC0A
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 21 Oct 2008 04:40:56 +0000 (UTC)
	(envelope-from dan@kulesh.obluda.cz)
Received: from kulesh.obluda.cz (localhost. [127.0.0.1])
	by kulesh.obluda.cz (8.14.3/8.14.3) with ESMTP id m9L49S40067060
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 21 Oct 2008 06:09:28 +0200 (CEST)
	(envelope-from dan@kulesh.obluda.cz)
Received: (from root@localhost)
	by kulesh.obluda.cz (8.14.3/8.14.3/Submit) id m9L49SS5067059;
	Tue, 21 Oct 2008 06:09:28 +0200 (CEST)
	(envelope-from dan)
Message-Id: <200810210409.m9L49SS5067059@kulesh.obluda.cz>
Date: Tue, 21 Oct 2008 06:09:28 +0200 (CEST)
From: Dan Lukes <dan@obluda.cz>
Reply-To: Dan Lukes <dan@obluda.cz>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [ PATCH ] ipfw_divert damages IPv6 packets
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         128260
>Category:       kern
>Synopsis:       [ipfw] [patch] ipfw_divert damages IPv6 packets
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ipfw
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Oct 21 04:50:00 UTC 2008
>Closed-Date:    Sat Jan 05 21:46:03 UTC 2013
>Last-Modified:  Sat Jan 05 21:46:03 UTC 2013
>Originator:     Dan Lukes
>Release:        FreeBSD 6.4-PRERELEASE i386
>Organization:
Obludarium
>Environment:
FOUND and PATCHED on

System: FreeBSD 6.4-PRERELEASE: Thu Sep 11 23:32:18 CEST 2008 i386
sys/netinet/ip_fw_pfil.c,v 1.19.2.4 2008/04/25 10:29:26

BUT THE SAME CODE (thus problem) seems to be part of RELENG-7 and HEAD

>Description:

In the ip_input() the code swap ip_len and ip_off fields to host order.
The ipfw_divert will revert the order back, but, unfortunatelly,
not only for affected IPv4 packet, but also for IPv6 packet which has
another header structure which can;t be interpreted using struct ip.

Resulting IPv6 packet has damaged header because swapping of
ramdom (from the view of IPv6 header structure) bytes.

Also, test for IPv4 fragmentation may have produce false positives when
applied to IPv6 packed with further undesired effects.

As the bug cause divert/tee of IPv6 to be unusable I'm marking it as critical. 

>How-To-Repeat:
	Tee a IPv6 traffic to divert port, read packet from them, 
compare original headers with headers after diverting
>Fix:

We need to apply IPv4 specific processing to IPv4 packets only
which is exactly what patch do - only "if (ip->ip_v == IPVERSION)"
check added around the original code, nothing more.

It would be very nice to have IPv6 tee/divert working
in forthcomming 6.4/7.1 releases, if possible. It seems to be clear
problem and simple patch (I hope) ...

Dan


--- sys/netinet/ip_fw_pfil.c.orig	2008-10-21 05:33:37.000000000 +0200
+++ sys/netinet/ip_fw_pfil.c	2008-10-21 05:33:37.000000000 +0200
@@ -365,32 +365,34 @@
 	 * in its original form.
 	 */
 	ip = mtod(clone, struct ip *);
-	if (!tee && ip->ip_off & (IP_MF | IP_OFFMASK)) {
+	if (ip->ip_v == IPVERSION) {
+		if (!tee && ip->ip_off & (IP_MF | IP_OFFMASK)) {
 
-		/* Reassemble packet. */
-		reass = ip_reass(clone);
+			/* Reassemble packet. */
+			reass = ip_reass(clone);
 
-		/*
-		 * IP header checksum fixup after reassembly and leave header
-		 * in network byte order.
-		 */
-		if (reass != NULL) {
-			ip = mtod(reass, struct ip *);
-			hlen = ip->ip_hl << 2;
+			/*
+			 * IP header checksum fixup after reassembly and leave header
+			 * in network byte order.
+			 */
+			if (reass != NULL) {
+				ip = mtod(reass, struct ip *);
+				hlen = ip->ip_hl << 2;
+				ip->ip_len = htons(ip->ip_len);
+				ip->ip_off = htons(ip->ip_off);
+				ip->ip_sum = 0;
+				if (hlen == sizeof(struct ip))
+					ip->ip_sum = in_cksum_hdr(ip);
+				else
+					ip->ip_sum = in_cksum(reass, hlen);
+				clone = reass;
+			} else
+				clone = NULL;
+		} else {
+			/* Convert header to network byte order. */
 			ip->ip_len = htons(ip->ip_len);
 			ip->ip_off = htons(ip->ip_off);
-			ip->ip_sum = 0;
-			if (hlen == sizeof(struct ip))
-				ip->ip_sum = in_cksum_hdr(ip);
-			else
-				ip->ip_sum = in_cksum(reass, hlen);
-			clone = reass;
-		} else
-			clone = NULL;
-	} else {
-		/* Convert header to network byte order. */
-		ip->ip_len = htons(ip->ip_len);
-		ip->ip_off = htons(ip->ip_off);
+		}
 	}
 
 	/* Do the dirty job... */


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-ipfw 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Tue Oct 21 10:43:36 UTC 2008 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128260 

From: Dan Lukes <dan@obluda.cz>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Mon, 06 Sep 2010 12:08:48 +0200

 The 8.1-RELEASE partially corrects such problem.
 
 But for DIVERT (not the TEE) there are still issues.
 
 For non-tee case, the header is still unconditionally considered to be 
 (struct ip). The
 ip->ip_off & (IP_MF | IP_OFFMASK)
 may be unintentionally true (for a IPv6 packet), then ip_reass will be 
 called with IPv6 packet, which is not apropriate.
 
 We still need to check the IP version:
 
 -       if (!tee && ntohs(ip->ip_off) & (IP_MF | IP_OFFMASK)) {
 +       if (ip->ip_v == 4 && !tee && ntohs(ip->ip_off) & (IP_MF | 
 IP_OFFMASK)) {
 
 Dan

From: Michael Scheidell <michael.scheidell@secnap.com>
To: <bug-followup@FreeBSD.org>
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Fri, 4 Feb 2011 11:21:16 -0500

 since the last ipv4 block was released yesterday, how about a 'ping' for 
 getting ipv6 working in ipfw_divert?
 
 an example: snort with inline, and/or snort 2.9.0 with daq and inline.  
 snort (by itself) is fully ipv6 ready, with a cravat about ipv6 and ipfw.
 
 so, ping!
 
 -- 
 Michael Scheidell, CTO
 o: 561-999-5000
 d: 561-948-2259
 ISN: 1259*1300
  >*| *SECNAP Network Security Corporation
 
     * Certified SNORT Integrator
     * 2008-9 Hot Company Award Winner, World Executive Alliance
     * Five-Star Partner Program 2009, VARBusiness
     * Best in Email Security,2010: Network Products Guide
     * King of Spam Filters, SC Magazine 2008
 
 ______________________________________________________________________
 This email has been scanned and certified safe by SpammerTrap(r). 
 For Information please see http://www.secnap.com/products/spammertrap/
 ______________________________________________________________________  

From: Sergey Matveychuk <sem33@yandex-team.ru>
To: bug-followup@FreeBSD.org, dan@obluda.cz
Cc: Julian Elischer <julian@freebsd.org>
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Fri, 25 Feb 2011 20:14:50 +0300

 This is a multi-part message in MIME format.
 --------------080106090909020900000003
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Here is my patch for IPv6 divert. It works for me, but it should be 
 reviewed and may be improved.
 
 I've touched nd6.c to prevent looping packet to local address (loopback).
 
 Any questions are welcome.
 
 --------------080106090909020900000003
 Content-Type: text/plain;
  name="divert-ipv6.diff.txt"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="divert-ipv6.diff.txt"
 
 LS0tIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5jLm9yaWcJMjAxMS0wMi0yNSAxNzo0
 OToxNS4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5j
 CTIwMTEtMDItMjUgMTc6NDk6MjcuMDAwMDAwMDAwICswMzAwCkBAIC0yODksNyArMjg5LDcg
 QEAKIAkgKiB3ZSBjYW4gZG8gaXQgYmVmb3JlIGEgJ3RlZScuCiAJICovCiAJaXAgPSBtdG9k
 KGNsb25lLCBzdHJ1Y3QgaXAgKik7Ci0JaWYgKCF0ZWUgJiYgbnRvaHMoaXAtPmlwX29mZikg
 JiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgeworCWlmIChpcC0+aXBfdiA9PSA0ICYmICF0ZWUg
 JiYgbnRvaHMoaXAtPmlwX29mZikgJiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgewogCQlpbnQg
 aGxlbjsKIAkJc3RydWN0IG1idWYgKnJlYXNzOwogCi0tLSBzeXMvbmV0aW5ldC9pcF9kaXZl
 cnQuYy5vcmlnCTIwMTEtMDItMjUgMTc6NDk6MDQuMDAwMDAwMDAwICswMzAwCisrKyBzeXMv
 bmV0aW5ldC9pcF9kaXZlcnQuYwkyMDExLTAyLTI1IDE3OjQ5OjM2LjAwMDAwMDAwMCArMDMw
 MApAQCAtNjksNiArNjksOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CiAjaW5j
 bHVkZSA8bmV0aW5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjaW5j
 bHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CiAj
 aWZkZWYgU0NUUAogI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgogI2VuZGlmCkBA
 IC0zODksNzEgKzM5MSw3OCBAQAogCS8qIFJlaW5qZWN0IHBhY2tldCBpbnRvIHRoZSBzeXN0
 ZW0gYXMgaW5jb21pbmcgb3Igb3V0Z29pbmcgKi8KIAlpZiAoIXNpbiB8fCBzaW4tPnNpbl9h
 ZGRyLnNfYWRkciA9PSAwKSB7CiAJCXN0cnVjdCBpcCAqY29uc3QgaXAgPSBtdG9kKG0sIHN0
 cnVjdCBpcCAqKTsKKyNpZmRlZiBJTkVUNgorCQlzdHJ1Y3QgaXA2X2hkciAqY29uc3QgaXA2
 ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKKyNlbmRpZgogCQlzdHJ1Y3QgaW5wY2Ig
 KmlucDsKIAogCQlkdC0+aW5mbyB8PSBJUEZXX0lTX0RJVkVSVCB8IElQRldfSU5GT19PVVQ7
 CiAJCWlucCA9IHNvdG9pbnBjYihzbyk7CiAJCUlOUF9STE9DSyhpbnApOwotCQkvKgotCQkg
 KiBEb24ndCBhbGxvdyBib3RoIHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRzb2Nrb3B0IG9wdGlv
 bnMsCi0JCSAqIGFuZCBkb24ndCBhbGxvdyBwYWNrZXQgbGVuZ3RoIHNpemVzIHRoYXQgd2ls
 bCBjcmFzaAotCQkgKi8KLQkJaWYgKCgoaXAtPmlwX2hsICE9IChzaXplb2YgKCppcCkgPj4g
 MikpICYmIGlucC0+aW5wX29wdGlvbnMpIHx8Ci0JCSAgICAgKCh1X3Nob3J0KW50b2hzKGlw
 LT5pcF9sZW4pID4gbS0+bV9wa3RoZHIubGVuKSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
 CQlJTlBfUlVOTE9DSyhpbnApOwotCQkJbV9mcmVlbShtKTsKLQkJfSBlbHNlIHsKKworCQlp
 ZihpcC0+aXBfdiA9PSA0KSB7CiAJCQkvKiBDb252ZXJ0IGZpZWxkcyB0byBob3N0IG9yZGVy
 IGZvciBpcF9vdXRwdXQoKSAqLwogCQkJaXAtPmlwX2xlbiA9IG50b2hzKGlwLT5pcF9sZW4p
 OwogCQkJaXAtPmlwX29mZiA9IG50b2hzKGlwLT5pcF9vZmYpOworCQl9CisjaWZkZWYgSU5F
 VDYJCQorCQllbHNlCisJCQlpcDYtPmlwNl9wbGVuID0gbnRvaHMoaXA2LT5pcDZfcGxlbik7
 CisjZW5kaWYKIAotCQkJLyogU2VuZCBwYWNrZXQgdG8gb3V0cHV0IHByb2Nlc3NpbmcgKi8K
 LQkJCUtNT0RfSVBTVEFUX0lOQyhpcHNfcmF3b3V0KTsJCS8qIFhYWCAqLworCQkvKiBTZW5k
 IHBhY2tldCB0byBvdXRwdXQgcHJvY2Vzc2luZyAqLworCQlLTU9EX0lQU1RBVF9JTkMoaXBz
 X3Jhd291dCk7CQkvKiBYWFggKi8KIAogI2lmZGVmIE1BQwotCQkJbWFjX2lucGNiX2NyZWF0
 ZV9tYnVmKGlucCwgbSk7CisJCW1hY19pbnBjYl9jcmVhdGVfbWJ1ZihpbnAsIG0pOwogI2Vu
 ZGlmCi0JCQkvKgotCQkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUgcGFja2V0IGludG8g
 aXBfb3V0cHV0KCkuCi0JCQkgKiBKdXN0IGluIGNhc2Ugc29ja2V0IG9wdGlvbnMgd2VyZSBz
 cGVjaWZpZWQgb24gdGhlCi0JCQkgKiBkaXZlcnQgc29ja2V0LCB3ZSBkdXBsaWNhdGUgdGhl
 bS4gIFRoaXMgaXMgZG9uZQotCQkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhvbGQgdGhlIFBD
 QiBsb2NrcyBvdmVyIHRoZSBjYWxsCi0JCQkgKiB0byBpcF9vdXRwdXQoKSwgYXMgZG9pbmcg
 dGhpcyByZXN1bHRzIGluIGEgbnVtYmVyIG9mCi0JCQkgKiBsb2NrIG9yZGVyaW5nIGNvbXBs
 ZXhpdGllcy4KLQkJCSAqCi0JCQkgKiBOb3RlIHRoYXQgd2Ugc2V0IHRoZSBtdWx0aWNhc3Qg
 b3B0aW9ucyBhcmd1bWVudCBmb3IKLQkJCSAqIGlwX291dHB1dCgpIHRvIE5VTEwgc2luY2Ug
 aXQgc2hvdWxkIGJlIGludmFyaWFudCB0aGF0Ci0JCQkgKiB0aGV5IGFyZSBub3QgcHJlc2Vu
 dC4KLQkJCSAqLwotCQkJS0FTU0VSVChpbnAtPmlucF9tb3B0aW9ucyA9PSBOVUxMLAotCQkJ
 ICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKLQkJ
 CW9wdGlvbnMgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIg
 dG8gbWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKLQkJCSAqIHNlbnNlIGZvciBkaXZlcnQg
 c29ja2V0cyB0byBoYXZlIG9wdGlvbnMuICBIb3dldmVyLAotCQkJICogZm9yIG5vdyB3ZSB3
 aWxsIGR1cGxpY2F0ZSB0aGVtIHdpdGggdGhlIElOUCBsb2NrcwotCQkJICogaGVsZCBzbyB3
 ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0aG91dAotCQkJICogcmVxdXJpbmcg
 YSByZWZlcmVuY2UgdG8gdGhlIHBjYi4KLQkJCSAqLwotCQkJaWYgKGlucC0+aW5wX29wdGlv
 bnMgIT0gTlVMTCkgewotCQkJCW9wdGlvbnMgPSBtX2R1cChpbnAtPmlucF9vcHRpb25zLCBN
 X0RPTlRXQUlUKTsKLQkJCQlpZiAob3B0aW9ucyA9PSBOVUxMKQotCQkJCQllcnJvciA9IEVO
 T0JVRlM7Ci0JCQl9Ci0JCQlJTlBfUlVOTE9DSyhpbnApOwotCQkJaWYgKGVycm9yID09IEVO
 T0JVRlMpIHsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJfQot
 CQkJZXJyb3IgPSBpcF9vdXRwdXQobSwgb3B0aW9ucywgTlVMTCwKLQkJCSAgICAoKHNvLT5z
 b19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/Ci0JCQkgICAgSVBfUk9VVEVUT0lGIDogMCkg
 fCBJUF9BTExPV0JST0FEQ0FTVCB8Ci0JCQkgICAgSVBfUkFXT1VUUFVULCBOVUxMLCBOVUxM
 KTsKLQkJCWlmIChvcHRpb25zICE9IE5VTEwpCi0JCQkJbV9mcmVlbShvcHRpb25zKTsKKwkJ
 LyoKKwkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUgcGFja2V0IGludG8gaXBfb3V0cHV0
 KCkuCisJCSAqIEp1c3QgaW4gY2FzZSBzb2NrZXQgb3B0aW9ucyB3ZXJlIHNwZWNpZmllZCBv
 biB0aGUKKwkJICogZGl2ZXJ0IHNvY2tldCwgd2UgZHVwbGljYXRlIHRoZW0uICBUaGlzIGlz
 IGRvbmUKKwkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhvbGQgdGhlIFBDQiBsb2NrcyBvdmVy
 IHRoZSBjYWxsCisJCSAqIHRvIGlwX291dHB1dCgpLCBhcyBkb2luZyB0aGlzIHJlc3VsdHMg
 aW4gYSBudW1iZXIgb2YKKwkJICogbG9jayBvcmRlcmluZyBjb21wbGV4aXRpZXMuCisJCSAq
 CisJCSAqIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIG11bHRpY2FzdCBvcHRpb25zIGFyZ3VtZW50
 IGZvcgorCQkgKiBpcF9vdXRwdXQoKSB0byBOVUxMIHNpbmNlIGl0IHNob3VsZCBiZSBpbnZh
 cmlhbnQgdGhhdAorCQkgKiB0aGV5IGFyZSBub3QgcHJlc2VudC4KKwkJICovCisJCUtBU1NF
 UlQoaW5wLT5pbnBfbW9wdGlvbnMgPT0gTlVMTCwKKwkJICAgICgibXVsdGljYXN0IG9wdGlv
 bnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKKwkJb3B0aW9ucyA9IE5VTEw7CisJCS8q
 CisJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIgdG8gbWUgd2hldGhlciBvciBub3QgaXQg
 bWFrZXMKKwkJICogc2Vuc2UgZm9yIGRpdmVydCBzb2NrZXRzIHRvIGhhdmUgb3B0aW9ucy4g
 IEhvd2V2ZXIsCisJCSAqIGZvciBub3cgd2Ugd2lsbCBkdXBsaWNhdGUgdGhlbSB3aXRoIHRo
 ZSBJTlAgbG9ja3MKKwkJICogaGVsZCBzbyB3ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0
 KCkgd2l0aG91dAorCQkgKiByZXF1cmluZyBhIHJlZmVyZW5jZSB0byB0aGUgcGNiLgorCQkg
 Ki8KKwkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVMTCkgeworCQkJb3B0aW9ucyA9IG1f
 ZHVwKGlucC0+aW5wX29wdGlvbnMsIE1fRE9OVFdBSVQpOworCQkJaWYgKG9wdGlvbnMgPT0g
 TlVMTCkKKwkJCQllcnJvciA9IEVOT0JVRlM7CiAJCX0KKwkJSU5QX1JVTkxPQ0soaW5wKTsK
 KwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCW1fZnJlZW0obSk7CisJCQlyZXR1cm4g
 KGVycm9yKTsKKwkJfQorCQlpZihpcC0+aXBfdiA9PSA0KQorCQkgICAgZXJyb3IgPSBpcF9v
 dXRwdXQobSwgb3B0aW9ucywgTlVMTCwKKwkJCSgoc28tPnNvX29wdGlvbnMgJiBTT19ET05U
 Uk9VVEUpID8KKwkJCUlQX1JPVVRFVE9JRiA6IDApIHwgSVBfQUxMT1dCUk9BRENBU1QgfAor
 CQkJSVBfUkFXT1VUUFVULCBOVUxMLCBOVUxMKTsKKyNpZmRlZiBJTkVUNgorCQllbHNlCisJ
 CSAgICBlcnJvciA9IGlwNl9vdXRwdXQobSwgTlVMTCwgTlVMTCwgMCwgCisJCQlOVUxMLCBO
 VUxMLCBOVUxMKTsKKyNlbmRpZgorCQlpZiAob3B0aW9ucyAhPSBOVUxMKQorCQkJbV9mcmVl
 bShvcHRpb25zKTsKIAl9IGVsc2UgeworCQlzdHJ1Y3QgaXAgKmNvbnN0IGlwID0gbXRvZCht
 LCBzdHJ1Y3QgaXAgKik7CisKIAkJZHQtPmluZm8gfD0gSVBGV19JU19ESVZFUlQgfCBJUEZX
 X0lORk9fSU47CiAJCWlmIChtLT5tX3BrdGhkci5yY3ZpZiA9PSBOVUxMKSB7CiAJCQkvKgpA
 QCAtNDc3LDcgKzQ4NiwxMiBAQAogCQltYWNfc29ja2V0X2NyZWF0ZV9tYnVmKHNvLCBtKTsK
 ICNlbmRpZgogCQkvKiBTZW5kIHBhY2tldCB0byBpbnB1dCBwcm9jZXNzaW5nIHZpYSBuZXRp
 c3IgKi8KLQkJbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1JfSVAsICh1aW50cHRyX3Qpc28sIG0p
 OworCQlpZihpcC0+aXBfdiA9PSA0KQorCQkgICAgbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1Jf
 SVAsICh1aW50cHRyX3Qpc28sIG0pOworI2lmZGVmIElORVQ2CisJCWVsc2UKKwkJICAgIG5l
 dGlzcl9xdWV1ZV9zcmMoTkVUSVNSX0lQVjYsICh1aW50cHRyX3Qpc28sIG0pOworI2VuZGlm
 CiAJfQogCiAJcmV0dXJuIGVycm9yOwotLS0gc3lzL25ldGluZXQ2L25kNi5jLm9yaWcJMjAx
 MS0wMi0yNSAxNzo0ODo1NC4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0Ni9uZDYu
 YwkyMDExLTAyLTI1IDE3OjQ5OjUxLjAwMDAwMDAwMCArMDMwMApAQCAtMTkyOCwxMCArMTky
 OCw2IEBACiAJCX0KIAkJcmV0dXJuIChlcnJvcik7CiAJfQotCWlmICgoaWZwLT5pZl9mbGFn
 cyAmIElGRl9MT09QQkFDSykgIT0gMCkgewotCQlyZXR1cm4gKCgqaWZwLT5pZl9vdXRwdXQp
 KG9yaWdpZnAsIG0sIChzdHJ1Y3Qgc29ja2FkZHIgKilkc3QsCi0JCSAgICBOVUxMKSk7Ci0J
 fQogCWVycm9yID0gKCppZnAtPmlmX291dHB1dCkoaWZwLCBtLCAoc3RydWN0IHNvY2thZGRy
 ICopZHN0LCBOVUxMKTsKIAlyZXR1cm4gKGVycm9yKTsKIAo=
 --------------080106090909020900000003--

From: Sergey Matveychuk <sem33@yandex-team.ru>
To: bug-followup@FreeBSD.org, dan@obluda.cz
Cc: Julian Elischer <julian@freebsd.org>
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Fri, 25 Feb 2011 20:53:54 +0300

 I've forget to mention, it tested only on 8.2. No -CURRENT around, sorry.

From: Sergey Matveychuk <sem33@yandex-team.ru>
To: bug-followup@FreeBSD.org, dan@obluda.cz
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Tue, 15 Mar 2011 21:36:01 +0300

 This is a multi-part message in MIME format.
 --------------040708040101090106080704
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 7bit
 
 The final version of the patch.
 
 * Add #include "opt_inet6.h". Thanks to Bjorn Danielsson 
 <fbsd@50days.dax.nu>.
 * Take checking of packet size back.
 * Ignore a packet if it's neither IPv4 nor IPv6.
 * A hack to Makefile to build as module with INET6 defined. (Like 
 sys/modules/linux/Makefile does).
 
 The patch applied to 8.x and CURRENT.
 
 --------------040708040101090106080704
 Content-Type: text/plain;
  name="divert-ipv6.diff"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="divert-ipv6.diff"
 
 LS0tIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5jLm9yaWcJMjAxMC0xMi0xMCAwODox
 ODozNy4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5j
 CTIwMTEtMDMtMTUgMjA6MDg6MjMuMDAwMDAwMDAwICswMzAwCkBAIC0yODksNyArMjg5LDcg
 QEAKIAkgKiB3ZSBjYW4gZG8gaXQgYmVmb3JlIGEgJ3RlZScuCiAJICovCiAJaXAgPSBtdG9k
 KGNsb25lLCBzdHJ1Y3QgaXAgKik7Ci0JaWYgKCF0ZWUgJiYgbnRvaHMoaXAtPmlwX29mZikg
 JiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgeworCWlmIChpcC0+aXBfdiA9PSA0ICYmICF0ZWUg
 JiYgbnRvaHMoaXAtPmlwX29mZikgJiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgewogCQlpbnQg
 aGxlbjsKIAkJc3RydWN0IG1idWYgKnJlYXNzOwogCi0tLSBzeXMvbmV0aW5ldC9pcF9kaXZl
 cnQuYy5vcmlnCTIwMTAtMDgtMjcgMjI6NTA6MTIuMDAwMDAwMDAwICswNDAwCisrKyBzeXMv
 bmV0aW5ldC9pcF9kaXZlcnQuYwkyMDExLTAzLTE1IDIxOjI0OjA2LjAwMDAwMDAwMCArMDMw
 MApAQCAtMzcsNiArMzcsNyBAQAogI2Vycm9yICJJUERJVkVSVCByZXF1aXJlcyBJTkVULiIK
 ICNlbmRpZgogI2VuZGlmCisjaW5jbHVkZSAib3B0X2luZXQ2LmgiCiAKICNpbmNsdWRlIDxz
 eXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+CkBAIC02OSw2ICs3MCw4IEBA
 CiAjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+
 CiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwNi5o
 PgorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KICNpZmRlZiBTQ1RQCiAjaW5jbHVk
 ZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+CiAjZW5kaWYKQEAgLTM4OSw3MSArMzkyLDEwMyBA
 QAogCS8qIFJlaW5qZWN0IHBhY2tldCBpbnRvIHRoZSBzeXN0ZW0gYXMgaW5jb21pbmcgb3Ig
 b3V0Z29pbmcgKi8KIAlpZiAoIXNpbiB8fCBzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7
 CiAJCXN0cnVjdCBpcCAqY29uc3QgaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKyNpZmRl
 ZiBJTkVUNgorCQlzdHJ1Y3QgaXA2X2hkciAqY29uc3QgaXA2ID0gbXRvZChtLCBzdHJ1Y3Qg
 aXA2X2hkciAqKTsKKyNlbmRpZgogCQlzdHJ1Y3QgaW5wY2IgKmlucDsKIAogCQlkdC0+aW5m
 byB8PSBJUEZXX0lTX0RJVkVSVCB8IElQRldfSU5GT19PVVQ7CiAJCWlucCA9IHNvdG9pbnBj
 Yihzbyk7CiAJCUlOUF9STE9DSyhpbnApOwotCQkvKgotCQkgKiBEb24ndCBhbGxvdyBib3Ro
 IHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRzb2Nrb3B0IG9wdGlvbnMsCi0JCSAqIGFuZCBkb24n
 dCBhbGxvdyBwYWNrZXQgbGVuZ3RoIHNpemVzIHRoYXQgd2lsbCBjcmFzaAotCQkgKi8KLQkJ
 aWYgKCgoaXAtPmlwX2hsICE9IChzaXplb2YgKCppcCkgPj4gMikpICYmIGlucC0+aW5wX29w
 dGlvbnMpIHx8Ci0JCSAgICAgKCh1X3Nob3J0KW50b2hzKGlwLT5pcF9sZW4pID4gbS0+bV9w
 a3RoZHIubGVuKSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlJTlBfUlVOTE9DSyhpbnAp
 OwotCQkJbV9mcmVlbShtKTsKLQkJfSBlbHNlIHsKKwkJaWYgKGlwLT5pcF92ID09IDQpIHsK
 KwkJCS8qCisJCQkgKiBEb24ndCBhbGxvdyBib3RoIHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRz
 b2Nrb3B0IG9wdGlvbnMsCisJCQkgKiBhbmQgZG9uJ3QgYWxsb3cgcGFja2V0IGxlbmd0aCBz
 aXplcyB0aGF0IHdpbGwgY3Jhc2gKKwkJCSAqLworCQkJaWYgKCgoaXAtPmlwX2hsICE9IChz
 aXplb2YgKCppcCkgPj4gMikpICYmIGlucC0+aW5wX29wdGlvbnMpIHx8CisJCQkgICAgICgo
 dV9zaG9ydCludG9ocyhpcC0+aXBfbGVuKSA+IG0tPm1fcGt0aGRyLmxlbikpIHsKKwkJCQll
 cnJvciA9IEVJTlZBTDsKKwkJCQlJTlBfUlVOTE9DSyhpbnApOworCQkJCWdvdG8gY2FudHNl
 bmQ7CisJCQl9CisKIAkJCS8qIENvbnZlcnQgZmllbGRzIHRvIGhvc3Qgb3JkZXIgZm9yIGlw
 X291dHB1dCgpICovCiAJCQlpcC0+aXBfbGVuID0gbnRvaHMoaXAtPmlwX2xlbik7CiAJCQlp
 cC0+aXBfb2ZmID0gbnRvaHMoaXAtPmlwX29mZik7CisJCX0KKyNpZmRlZiBJTkVUNgkJCisJ
 CWVsc2UKKwkJCWlmIChpcC0+aXBfdiA9PSA2KSB7CisJCQkgICAgLyogRG9uJ3QgYWxsb3cg
 cGFja2V0IGxlbmd0aCBzaXplcyB0aGF0IHdpbGwgY3Jhc2ggKi8KKwkJCSAgICBpZiAoKCh1
 X3Nob3J0KW50b2hzKGlwNi0+aXA2X3BsZW4pID4gbS0+bV9wa3RoZHIubGVuKSkgeworCQkJ
 CSAgICBlcnJvciA9IEVJTlZBTDsKKwkJCQkgICAgSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkg
 ICAgZ290byBjYW50c2VuZDsKKwkJCSAgICB9CisKKwkJCSAgICBpcDYtPmlwNl9wbGVuID0g
 bnRvaHMoaXA2LT5pcDZfcGxlbik7CisJCQl9CisjZW5kaWYKKwkJLyogVW5rbm93biBwcm90
 b2NvbCAqLworCQllbHNlIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJSU5QX1JVTkxPQ0so
 aW5wKTsKKwkJCWdvdG8gY2FudHNlbmQ7CisJCX0KIAotCQkJLyogU2VuZCBwYWNrZXQgdG8g
 b3V0cHV0IHByb2Nlc3NpbmcgKi8KLQkJCUtNT0RfSVBTVEFUX0lOQyhpcHNfcmF3b3V0KTsJ
 CS8qIFhYWCAqLworCQkvKiBTZW5kIHBhY2tldCB0byBvdXRwdXQgcHJvY2Vzc2luZyAqLwor
 CQlLTU9EX0lQU1RBVF9JTkMoaXBzX3Jhd291dCk7CQkvKiBYWFggKi8KIAogI2lmZGVmIE1B
 QwotCQkJbWFjX2lucGNiX2NyZWF0ZV9tYnVmKGlucCwgbSk7CisJCW1hY19pbnBjYl9jcmVh
 dGVfbWJ1ZihpbnAsIG0pOwogI2VuZGlmCi0JCQkvKgotCQkJICogR2V0IHJlYWR5IHRvIGlu
 amVjdCB0aGUgcGFja2V0IGludG8gaXBfb3V0cHV0KCkuCi0JCQkgKiBKdXN0IGluIGNhc2Ug
 c29ja2V0IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgb24gdGhlCi0JCQkgKiBkaXZlcnQgc29j
 a2V0LCB3ZSBkdXBsaWNhdGUgdGhlbS4gIFRoaXMgaXMgZG9uZQotCQkJICogdG8gYXZvaWQg
 aGF2aW5nIHRvIGhvbGQgdGhlIFBDQiBsb2NrcyBvdmVyIHRoZSBjYWxsCi0JCQkgKiB0byBp
 cF9vdXRwdXQoKSwgYXMgZG9pbmcgdGhpcyByZXN1bHRzIGluIGEgbnVtYmVyIG9mCi0JCQkg
 KiBsb2NrIG9yZGVyaW5nIGNvbXBsZXhpdGllcy4KLQkJCSAqCi0JCQkgKiBOb3RlIHRoYXQg
 d2Ugc2V0IHRoZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmd1bWVudCBmb3IKLQkJCSAqIGlwX291
 dHB1dCgpIHRvIE5VTEwgc2luY2UgaXQgc2hvdWxkIGJlIGludmFyaWFudCB0aGF0Ci0JCQkg
 KiB0aGV5IGFyZSBub3QgcHJlc2VudC4KLQkJCSAqLwotCQkJS0FTU0VSVChpbnAtPmlucF9t
 b3B0aW9ucyA9PSBOVUxMLAotCQkJICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEg
 ZGl2ZXJ0IHNvY2tldCIpKTsKLQkJCW9wdGlvbnMgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFhY
 WENTSlA6IEl0IGlzIHVuY2xlYXIgdG8gbWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKLQkJ
 CSAqIHNlbnNlIGZvciBkaXZlcnQgc29ja2V0cyB0byBoYXZlIG9wdGlvbnMuICBIb3dldmVy
 LAotCQkJICogZm9yIG5vdyB3ZSB3aWxsIGR1cGxpY2F0ZSB0aGVtIHdpdGggdGhlIElOUCBs
 b2NrcwotCQkJICogaGVsZCBzbyB3ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0
 aG91dAotCQkJICogcmVxdXJpbmcgYSByZWZlcmVuY2UgdG8gdGhlIHBjYi4KLQkJCSAqLwot
 CQkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVMTCkgewotCQkJCW9wdGlvbnMgPSBtX2R1
 cChpbnAtPmlucF9vcHRpb25zLCBNX0RPTlRXQUlUKTsKLQkJCQlpZiAob3B0aW9ucyA9PSBO
 VUxMKQotCQkJCQllcnJvciA9IEVOT0JVRlM7Ci0JCQl9Ci0JCQlJTlBfUlVOTE9DSyhpbnAp
 OwotCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCXJl
 dHVybiAoZXJyb3IpOwotCQkJfQotCQkJZXJyb3IgPSBpcF9vdXRwdXQobSwgb3B0aW9ucywg
 TlVMTCwKLQkJCSAgICAoKHNvLT5zb19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/Ci0JCQkg
 ICAgSVBfUk9VVEVUT0lGIDogMCkgfCBJUF9BTExPV0JST0FEQ0FTVCB8Ci0JCQkgICAgSVBf
 UkFXT1VUUFVULCBOVUxMLCBOVUxMKTsKLQkJCWlmIChvcHRpb25zICE9IE5VTEwpCi0JCQkJ
 bV9mcmVlbShvcHRpb25zKTsKKwkJLyoKKwkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUg
 cGFja2V0IGludG8gaXBfb3V0cHV0KCkuCisJCSAqIEp1c3QgaW4gY2FzZSBzb2NrZXQgb3B0
 aW9ucyB3ZXJlIHNwZWNpZmllZCBvbiB0aGUKKwkJICogZGl2ZXJ0IHNvY2tldCwgd2UgZHVw
 bGljYXRlIHRoZW0uICBUaGlzIGlzIGRvbmUKKwkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhv
 bGQgdGhlIFBDQiBsb2NrcyBvdmVyIHRoZSBjYWxsCisJCSAqIHRvIGlwX291dHB1dCgpLCBh
 cyBkb2luZyB0aGlzIHJlc3VsdHMgaW4gYSBudW1iZXIgb2YKKwkJICogbG9jayBvcmRlcmlu
 ZyBjb21wbGV4aXRpZXMuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIG11bHRp
 Y2FzdCBvcHRpb25zIGFyZ3VtZW50IGZvcgorCQkgKiBpcF9vdXRwdXQoKSB0byBOVUxMIHNp
 bmNlIGl0IHNob3VsZCBiZSBpbnZhcmlhbnQgdGhhdAorCQkgKiB0aGV5IGFyZSBub3QgcHJl
 c2VudC4KKwkJICovCisJCUtBU1NFUlQoaW5wLT5pbnBfbW9wdGlvbnMgPT0gTlVMTCwKKwkJ
 ICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKKwkJ
 b3B0aW9ucyA9IE5VTEw7CisJCS8qCisJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIgdG8g
 bWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKKwkJICogc2Vuc2UgZm9yIGRpdmVydCBzb2Nr
 ZXRzIHRvIGhhdmUgb3B0aW9ucy4gIEhvd2V2ZXIsCisJCSAqIGZvciBub3cgd2Ugd2lsbCBk
 dXBsaWNhdGUgdGhlbSB3aXRoIHRoZSBJTlAgbG9ja3MKKwkJICogaGVsZCBzbyB3ZSBjYW4g
 dXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0aG91dAorCQkgKiByZXF1cmluZyBhIHJlZmVy
 ZW5jZSB0byB0aGUgcGNiLgorCQkgKi8KKwkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVM
 TCkgeworCQkJb3B0aW9ucyA9IG1fZHVwKGlucC0+aW5wX29wdGlvbnMsIE1fRE9OVFdBSVQp
 OworCQkJaWYgKG9wdGlvbnMgPT0gTlVMTCkKKwkJCQllcnJvciA9IEVOT0JVRlM7CisJCX0K
 KwkJSU5QX1JVTkxPQ0soaW5wKTsKKwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCW1f
 ZnJlZW0obSk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQorCQlpZiAoaXAtPmlwX3YgPT0g
 NCkKKwkJICAgIGVycm9yID0gaXBfb3V0cHV0KG0sIG9wdGlvbnMsIE5VTEwsCisJCQkoKHNv
 LT5zb19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/CisJCQlJUF9ST1VURVRPSUYgOiAwKSB8
 IElQX0FMTE9XQlJPQURDQVNUIHwKKwkJCUlQX1JBV09VVFBVVCwgTlVMTCwgTlVMTCk7Cisj
 aWZkZWYgSU5FVDYKKwkJZWxzZQorCQkgICAgZXJyb3IgPSBpcDZfb3V0cHV0KG0sIE5VTEws
 IE5VTEwsIDAsIAorCQkJTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKwkJaWYgKG9wdGlv
 bnMgIT0gTlVMTCkKKwkJCW1fZnJlZW0ob3B0aW9ucyk7CiAJfSBlbHNlIHsKKwkJc3RydWN0
 IGlwICpjb25zdCBpcCA9IG10b2QobSwgc3RydWN0IGlwICopOworCiAJCWR0LT5pbmZvIHw9
 IElQRldfSVNfRElWRVJUIHwgSVBGV19JTkZPX0lOOwogCQlpZiAobS0+bV9wa3RoZHIucmN2
 aWYgPT0gTlVMTCkgewogCQkJLyoKQEAgLTQ3Nyw3ICs1MTIsMTIgQEAKIAkJbWFjX3NvY2tl
 dF9jcmVhdGVfbWJ1ZihzbywgbSk7CiAjZW5kaWYKIAkJLyogU2VuZCBwYWNrZXQgdG8gaW5w
 dXQgcHJvY2Vzc2luZyB2aWEgbmV0aXNyICovCi0JCW5ldGlzcl9xdWV1ZV9zcmMoTkVUSVNS
 X0lQLCAodWludHB0cl90KXNvLCBtKTsKKwkJaWYgKGlwLT5pcF92ID09IDQpCisJCSAgICBu
 ZXRpc3JfcXVldWVfc3JjKE5FVElTUl9JUCwgKHVpbnRwdHJfdClzbywgbSk7CisjaWZkZWYg
 SU5FVDYKKwkJZWxzZQorCQkgICAgbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1JfSVBWNiwgKHVp
 bnRwdHJfdClzbywgbSk7CisjZW5kaWYKIAl9CiAKIAlyZXR1cm4gZXJyb3I7Ci0tLSBzeXMv
 bmV0aW5ldDYvbmQ2LmMub3JpZwkyMDExLTAzLTE1IDIwOjA4OjIzLjAwMDAwMDAwMCArMDMw
 MAorKysgc3lzL25ldGluZXQ2L25kNi5jCTIwMTEtMDMtMTUgMjA6MDg6MjMuMDAwMDAwMDAw
 ICswMzAwCkBAIC00NDIsNiArNDQyLDggQEAKIAlzdHJ1Y3QgaW42X2FkZHIgKmRzdDsKIAlz
 dHJ1Y3QgaWZuZXQgKmlmcDsKIAlzdHJ1Y3QgbmRfaWZpbmZvICpuZGkgPSBOVUxMOworCXN0
 cnVjdCBydF9hZGRyaW5mbyBydGluZm87CisJc3RydWN0IHNvY2thZGRyX2RsIGdhdGV3YXk7
 CiAKIAlLQVNTRVJUKGFyZyAhPSBOVUxMLCAoIiVzOiBhcmcgTlVMTCIsIF9fZnVuY19fKSk7
 CiAJbG4gPSAoc3RydWN0IGxsZW50cnkgKilhcmc7CkBAIC01MTIsNiArNTE0LDE1IEBACiAJ
 Y2FzZSBORDZfTExJTkZPX1NUQUxFOgogCQkvKiBHYXJiYWdlIENvbGxlY3Rpb24oUkZDIDI0
 NjEgNS4zKSAqLwogCQlpZiAoIU5ENl9MTElORk9fUEVSTUFORU5UKGxuKSkgeworCQkJYnpl
 cm8oJmdhdGV3YXksIHNpemVvZihnYXRld2F5KSk7CisJCQlnYXRld2F5LnNkbF9sZW4gPSBz
 aXplb2Yoc3RydWN0IHNvY2thZGRyX2RsKTsKKwkJCWdhdGV3YXkuc2RsX2ZhbWlseSA9IEFG
 X0xJTks7CisJCQlnYXRld2F5LnNkbF9hbGVuID0gNjsKKwkJCWJ6ZXJvKCZydGluZm8sIHNp
 emVvZihzdHJ1Y3QgcnRfYWRkcmluZm8pKTsKKwkJCXJ0aW5mby5ydGlfaW5mb1swXSA9IChz
 dHJ1Y3Qgc29ja2FkZHIqKUwzX0FERFIobG4pOworCQkJcnRpbmZvLnJ0aV9pbmZvWzFdID0g
 KHN0cnVjdCBzb2NrYWRkciopJmdhdGV3YXk7CisJCQlydGluZm8ucnRpX2FkZHJzID0gUlRB
 X0RTVCB8IFJUQV9HQVRFV0FZOworCQkJcnRfbWlzc21zZyhSVE1fREVMRVRFLCAmcnRpbmZv
 LCBSVEZfSE9TVCB8IFJURl9MTERBVEEsIDApOwogCQkJKHZvaWQpbmQ2X2ZyZWUobG4sIDEp
 OwogCQkJbG4gPSBOVUxMOwogCQl9CkBAIC01MzksNiArNTUwLDE1IEBACiAJCQluZDZfbnNf
 b3V0cHV0KGlmcCwgZHN0LCBkc3QsIGxuLCAwKTsKIAkJCUxMRV9XTE9DSyhsbik7CiAJCX0g
 ZWxzZSB7CisJCQliemVybygmZ2F0ZXdheSwgc2l6ZW9mKGdhdGV3YXkpKTsKKwkJCWdhdGV3
 YXkuc2RsX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfZGwpOworCQkJZ2F0ZXdheS5z
 ZGxfZmFtaWx5ID0gQUZfTElOSzsKKwkJCWdhdGV3YXkuc2RsX2FsZW4gPSA2OworCQkJYnpl
 cm8oJnJ0aW5mbywgc2l6ZW9mKHN0cnVjdCBydF9hZGRyaW5mbykpOworCQkJcnRpbmZvLnJ0
 aV9pbmZvWzBdID0gKHN0cnVjdCBzb2NrYWRkciopTDNfQUREUihsbik7CisJCQlydGluZm8u
 cnRpX2luZm9bMV0gPSAoc3RydWN0IHNvY2thZGRyKikmZ2F0ZXdheTsKKwkJCXJ0aW5mby5y
 dGlfYWRkcnMgPSBSVEFfRFNUIHwgUlRBX0dBVEVXQVk7CisJCQlydF9taXNzbXNnKFJUTV9E
 RUxFVEUsICZydGluZm8sIFJURl9IT1NUIHwgUlRGX0xMREFUQSwgMCk7CiAJCQkodm9pZClu
 ZDZfZnJlZShsbiwgMCk7CiAJCQlsbiA9IE5VTEw7CiAJCX0KLS0tIHN5cy9tb2R1bGVzL2lw
 ZGl2ZXJ0L01ha2VmaWxlLm9yaWcJMjAwOS0wOC0wMyAxMjoxMzowNi4wMDAwMDAwMDAgKzA0
 MDAKKysrIHN5cy9tb2R1bGVzL2lwZGl2ZXJ0L01ha2VmaWxlCTIwMTEtMDMtMTUgMjE6MTk6
 MzMuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYgKzMsMTEgQEAKIC5QQVRIOiAkey5DVVJESVJ9
 Ly4uLy4uL25ldGluZXQKIAogS01PRD0gICBpcGRpdmVydAotU1JDUz0gICBpcF9kaXZlcnQu
 YworU1JDUz0gICBpcF9kaXZlcnQuYyBvcHRfaW5ldDYuaAorCisuaWYgIWRlZmluZWQoS0VS
 TkJVSUxERElSKQorb3B0X2luZXQ2Lmg6CisJZWNobyAiI2RlZmluZSBJTkVUNiAxIiA+ICR7
 LlRBUkdFVH0KKy5lbmRpZgogCiAuaW5jbHVkZSA8YnNkLmttb2QubWs+Cg==
 --------------040708040101090106080704--

From: Sergey Matveychuk <sem33@yandex-team.ru>
To: bug-followup@FreeBSD.org, dan@obluda.cz
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Tue, 15 Mar 2011 21:56:14 +0300

 This is a multi-part message in MIME format.
 --------------000004090805090308080905
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Oh, sorry, the same patch again. Two hunks in nd6.c was added for 
 testing only. Sorry.
 
 --------------000004090805090308080905
 Content-Type: text/plain;
  name="divert-ipv6.diff"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="divert-ipv6.diff"
 
 LS0tIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5jLm9yaWcJMjAxMC0xMi0xMCAwODox
 ODozNy4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5j
 CTIwMTEtMDMtMTUgMjA6MDg6MjMuMDAwMDAwMDAwICswMzAwCkBAIC0yODksNyArMjg5LDcg
 QEAKIAkgKiB3ZSBjYW4gZG8gaXQgYmVmb3JlIGEgJ3RlZScuCiAJICovCiAJaXAgPSBtdG9k
 KGNsb25lLCBzdHJ1Y3QgaXAgKik7Ci0JaWYgKCF0ZWUgJiYgbnRvaHMoaXAtPmlwX29mZikg
 JiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgeworCWlmIChpcC0+aXBfdiA9PSA0ICYmICF0ZWUg
 JiYgbnRvaHMoaXAtPmlwX29mZikgJiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgewogCQlpbnQg
 aGxlbjsKIAkJc3RydWN0IG1idWYgKnJlYXNzOwogCi0tLSBzeXMvbmV0aW5ldC9pcF9kaXZl
 cnQuYy5vcmlnCTIwMTAtMDgtMjcgMjI6NTA6MTIuMDAwMDAwMDAwICswNDAwCisrKyBzeXMv
 bmV0aW5ldC9pcF9kaXZlcnQuYwkyMDExLTAzLTE1IDIxOjI0OjA2LjAwMDAwMDAwMCArMDMw
 MApAQCAtMzcsNiArMzcsNyBAQAogI2Vycm9yICJJUERJVkVSVCByZXF1aXJlcyBJTkVULiIK
 ICNlbmRpZgogI2VuZGlmCisjaW5jbHVkZSAib3B0X2luZXQ2LmgiCiAKICNpbmNsdWRlIDxz
 eXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+CkBAIC02OSw2ICs3MCw4IEBA
 CiAjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+
 CiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwNi5o
 PgorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KICNpZmRlZiBTQ1RQCiAjaW5jbHVk
 ZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+CiAjZW5kaWYKQEAgLTM4OSw3MSArMzkyLDEwMyBA
 QAogCS8qIFJlaW5qZWN0IHBhY2tldCBpbnRvIHRoZSBzeXN0ZW0gYXMgaW5jb21pbmcgb3Ig
 b3V0Z29pbmcgKi8KIAlpZiAoIXNpbiB8fCBzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7
 CiAJCXN0cnVjdCBpcCAqY29uc3QgaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKyNpZmRl
 ZiBJTkVUNgorCQlzdHJ1Y3QgaXA2X2hkciAqY29uc3QgaXA2ID0gbXRvZChtLCBzdHJ1Y3Qg
 aXA2X2hkciAqKTsKKyNlbmRpZgogCQlzdHJ1Y3QgaW5wY2IgKmlucDsKIAogCQlkdC0+aW5m
 byB8PSBJUEZXX0lTX0RJVkVSVCB8IElQRldfSU5GT19PVVQ7CiAJCWlucCA9IHNvdG9pbnBj
 Yihzbyk7CiAJCUlOUF9STE9DSyhpbnApOwotCQkvKgotCQkgKiBEb24ndCBhbGxvdyBib3Ro
 IHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRzb2Nrb3B0IG9wdGlvbnMsCi0JCSAqIGFuZCBkb24n
 dCBhbGxvdyBwYWNrZXQgbGVuZ3RoIHNpemVzIHRoYXQgd2lsbCBjcmFzaAotCQkgKi8KLQkJ
 aWYgKCgoaXAtPmlwX2hsICE9IChzaXplb2YgKCppcCkgPj4gMikpICYmIGlucC0+aW5wX29w
 dGlvbnMpIHx8Ci0JCSAgICAgKCh1X3Nob3J0KW50b2hzKGlwLT5pcF9sZW4pID4gbS0+bV9w
 a3RoZHIubGVuKSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlJTlBfUlVOTE9DSyhpbnAp
 OwotCQkJbV9mcmVlbShtKTsKLQkJfSBlbHNlIHsKKwkJaWYgKGlwLT5pcF92ID09IDQpIHsK
 KwkJCS8qCisJCQkgKiBEb24ndCBhbGxvdyBib3RoIHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRz
 b2Nrb3B0IG9wdGlvbnMsCisJCQkgKiBhbmQgZG9uJ3QgYWxsb3cgcGFja2V0IGxlbmd0aCBz
 aXplcyB0aGF0IHdpbGwgY3Jhc2gKKwkJCSAqLworCQkJaWYgKCgoaXAtPmlwX2hsICE9IChz
 aXplb2YgKCppcCkgPj4gMikpICYmIGlucC0+aW5wX29wdGlvbnMpIHx8CisJCQkgICAgICgo
 dV9zaG9ydCludG9ocyhpcC0+aXBfbGVuKSA+IG0tPm1fcGt0aGRyLmxlbikpIHsKKwkJCQll
 cnJvciA9IEVJTlZBTDsKKwkJCQlJTlBfUlVOTE9DSyhpbnApOworCQkJCWdvdG8gY2FudHNl
 bmQ7CisJCQl9CisKIAkJCS8qIENvbnZlcnQgZmllbGRzIHRvIGhvc3Qgb3JkZXIgZm9yIGlw
 X291dHB1dCgpICovCiAJCQlpcC0+aXBfbGVuID0gbnRvaHMoaXAtPmlwX2xlbik7CiAJCQlp
 cC0+aXBfb2ZmID0gbnRvaHMoaXAtPmlwX29mZik7CisJCX0KKyNpZmRlZiBJTkVUNgkJCisJ
 CWVsc2UKKwkJCWlmIChpcC0+aXBfdiA9PSA2KSB7CisJCQkgICAgLyogRG9uJ3QgYWxsb3cg
 cGFja2V0IGxlbmd0aCBzaXplcyB0aGF0IHdpbGwgY3Jhc2ggKi8KKwkJCSAgICBpZiAoKCh1
 X3Nob3J0KW50b2hzKGlwNi0+aXA2X3BsZW4pID4gbS0+bV9wa3RoZHIubGVuKSkgeworCQkJ
 CSAgICBlcnJvciA9IEVJTlZBTDsKKwkJCQkgICAgSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkg
 ICAgZ290byBjYW50c2VuZDsKKwkJCSAgICB9CisKKwkJCSAgICBpcDYtPmlwNl9wbGVuID0g
 bnRvaHMoaXA2LT5pcDZfcGxlbik7CisJCQl9CisjZW5kaWYKKwkJLyogVW5rbm93biBwcm90
 b2NvbCAqLworCQllbHNlIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJSU5QX1JVTkxPQ0so
 aW5wKTsKKwkJCWdvdG8gY2FudHNlbmQ7CisJCX0KIAotCQkJLyogU2VuZCBwYWNrZXQgdG8g
 b3V0cHV0IHByb2Nlc3NpbmcgKi8KLQkJCUtNT0RfSVBTVEFUX0lOQyhpcHNfcmF3b3V0KTsJ
 CS8qIFhYWCAqLworCQkvKiBTZW5kIHBhY2tldCB0byBvdXRwdXQgcHJvY2Vzc2luZyAqLwor
 CQlLTU9EX0lQU1RBVF9JTkMoaXBzX3Jhd291dCk7CQkvKiBYWFggKi8KIAogI2lmZGVmIE1B
 QwotCQkJbWFjX2lucGNiX2NyZWF0ZV9tYnVmKGlucCwgbSk7CisJCW1hY19pbnBjYl9jcmVh
 dGVfbWJ1ZihpbnAsIG0pOwogI2VuZGlmCi0JCQkvKgotCQkJICogR2V0IHJlYWR5IHRvIGlu
 amVjdCB0aGUgcGFja2V0IGludG8gaXBfb3V0cHV0KCkuCi0JCQkgKiBKdXN0IGluIGNhc2Ug
 c29ja2V0IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgb24gdGhlCi0JCQkgKiBkaXZlcnQgc29j
 a2V0LCB3ZSBkdXBsaWNhdGUgdGhlbS4gIFRoaXMgaXMgZG9uZQotCQkJICogdG8gYXZvaWQg
 aGF2aW5nIHRvIGhvbGQgdGhlIFBDQiBsb2NrcyBvdmVyIHRoZSBjYWxsCi0JCQkgKiB0byBp
 cF9vdXRwdXQoKSwgYXMgZG9pbmcgdGhpcyByZXN1bHRzIGluIGEgbnVtYmVyIG9mCi0JCQkg
 KiBsb2NrIG9yZGVyaW5nIGNvbXBsZXhpdGllcy4KLQkJCSAqCi0JCQkgKiBOb3RlIHRoYXQg
 d2Ugc2V0IHRoZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmd1bWVudCBmb3IKLQkJCSAqIGlwX291
 dHB1dCgpIHRvIE5VTEwgc2luY2UgaXQgc2hvdWxkIGJlIGludmFyaWFudCB0aGF0Ci0JCQkg
 KiB0aGV5IGFyZSBub3QgcHJlc2VudC4KLQkJCSAqLwotCQkJS0FTU0VSVChpbnAtPmlucF9t
 b3B0aW9ucyA9PSBOVUxMLAotCQkJICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEg
 ZGl2ZXJ0IHNvY2tldCIpKTsKLQkJCW9wdGlvbnMgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFhY
 WENTSlA6IEl0IGlzIHVuY2xlYXIgdG8gbWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKLQkJ
 CSAqIHNlbnNlIGZvciBkaXZlcnQgc29ja2V0cyB0byBoYXZlIG9wdGlvbnMuICBIb3dldmVy
 LAotCQkJICogZm9yIG5vdyB3ZSB3aWxsIGR1cGxpY2F0ZSB0aGVtIHdpdGggdGhlIElOUCBs
 b2NrcwotCQkJICogaGVsZCBzbyB3ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0
 aG91dAotCQkJICogcmVxdXJpbmcgYSByZWZlcmVuY2UgdG8gdGhlIHBjYi4KLQkJCSAqLwot
 CQkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVMTCkgewotCQkJCW9wdGlvbnMgPSBtX2R1
 cChpbnAtPmlucF9vcHRpb25zLCBNX0RPTlRXQUlUKTsKLQkJCQlpZiAob3B0aW9ucyA9PSBO
 VUxMKQotCQkJCQllcnJvciA9IEVOT0JVRlM7Ci0JCQl9Ci0JCQlJTlBfUlVOTE9DSyhpbnAp
 OwotCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCXJl
 dHVybiAoZXJyb3IpOwotCQkJfQotCQkJZXJyb3IgPSBpcF9vdXRwdXQobSwgb3B0aW9ucywg
 TlVMTCwKLQkJCSAgICAoKHNvLT5zb19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/Ci0JCQkg
 ICAgSVBfUk9VVEVUT0lGIDogMCkgfCBJUF9BTExPV0JST0FEQ0FTVCB8Ci0JCQkgICAgSVBf
 UkFXT1VUUFVULCBOVUxMLCBOVUxMKTsKLQkJCWlmIChvcHRpb25zICE9IE5VTEwpCi0JCQkJ
 bV9mcmVlbShvcHRpb25zKTsKKwkJLyoKKwkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUg
 cGFja2V0IGludG8gaXBfb3V0cHV0KCkuCisJCSAqIEp1c3QgaW4gY2FzZSBzb2NrZXQgb3B0
 aW9ucyB3ZXJlIHNwZWNpZmllZCBvbiB0aGUKKwkJICogZGl2ZXJ0IHNvY2tldCwgd2UgZHVw
 bGljYXRlIHRoZW0uICBUaGlzIGlzIGRvbmUKKwkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhv
 bGQgdGhlIFBDQiBsb2NrcyBvdmVyIHRoZSBjYWxsCisJCSAqIHRvIGlwX291dHB1dCgpLCBh
 cyBkb2luZyB0aGlzIHJlc3VsdHMgaW4gYSBudW1iZXIgb2YKKwkJICogbG9jayBvcmRlcmlu
 ZyBjb21wbGV4aXRpZXMuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIG11bHRp
 Y2FzdCBvcHRpb25zIGFyZ3VtZW50IGZvcgorCQkgKiBpcF9vdXRwdXQoKSB0byBOVUxMIHNp
 bmNlIGl0IHNob3VsZCBiZSBpbnZhcmlhbnQgdGhhdAorCQkgKiB0aGV5IGFyZSBub3QgcHJl
 c2VudC4KKwkJICovCisJCUtBU1NFUlQoaW5wLT5pbnBfbW9wdGlvbnMgPT0gTlVMTCwKKwkJ
 ICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKKwkJ
 b3B0aW9ucyA9IE5VTEw7CisJCS8qCisJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIgdG8g
 bWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKKwkJICogc2Vuc2UgZm9yIGRpdmVydCBzb2Nr
 ZXRzIHRvIGhhdmUgb3B0aW9ucy4gIEhvd2V2ZXIsCisJCSAqIGZvciBub3cgd2Ugd2lsbCBk
 dXBsaWNhdGUgdGhlbSB3aXRoIHRoZSBJTlAgbG9ja3MKKwkJICogaGVsZCBzbyB3ZSBjYW4g
 dXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0aG91dAorCQkgKiByZXF1cmluZyBhIHJlZmVy
 ZW5jZSB0byB0aGUgcGNiLgorCQkgKi8KKwkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVM
 TCkgeworCQkJb3B0aW9ucyA9IG1fZHVwKGlucC0+aW5wX29wdGlvbnMsIE1fRE9OVFdBSVQp
 OworCQkJaWYgKG9wdGlvbnMgPT0gTlVMTCkKKwkJCQllcnJvciA9IEVOT0JVRlM7CisJCX0K
 KwkJSU5QX1JVTkxPQ0soaW5wKTsKKwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCW1f
 ZnJlZW0obSk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQorCQlpZiAoaXAtPmlwX3YgPT0g
 NCkKKwkJICAgIGVycm9yID0gaXBfb3V0cHV0KG0sIG9wdGlvbnMsIE5VTEwsCisJCQkoKHNv
 LT5zb19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/CisJCQlJUF9ST1VURVRPSUYgOiAwKSB8
 IElQX0FMTE9XQlJPQURDQVNUIHwKKwkJCUlQX1JBV09VVFBVVCwgTlVMTCwgTlVMTCk7Cisj
 aWZkZWYgSU5FVDYKKwkJZWxzZQorCQkgICAgZXJyb3IgPSBpcDZfb3V0cHV0KG0sIE5VTEws
 IE5VTEwsIDAsIAorCQkJTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKwkJaWYgKG9wdGlv
 bnMgIT0gTlVMTCkKKwkJCW1fZnJlZW0ob3B0aW9ucyk7CiAJfSBlbHNlIHsKKwkJc3RydWN0
 IGlwICpjb25zdCBpcCA9IG10b2QobSwgc3RydWN0IGlwICopOworCiAJCWR0LT5pbmZvIHw9
 IElQRldfSVNfRElWRVJUIHwgSVBGV19JTkZPX0lOOwogCQlpZiAobS0+bV9wa3RoZHIucmN2
 aWYgPT0gTlVMTCkgewogCQkJLyoKQEAgLTQ3Nyw3ICs1MTIsMTIgQEAKIAkJbWFjX3NvY2tl
 dF9jcmVhdGVfbWJ1ZihzbywgbSk7CiAjZW5kaWYKIAkJLyogU2VuZCBwYWNrZXQgdG8gaW5w
 dXQgcHJvY2Vzc2luZyB2aWEgbmV0aXNyICovCi0JCW5ldGlzcl9xdWV1ZV9zcmMoTkVUSVNS
 X0lQLCAodWludHB0cl90KXNvLCBtKTsKKwkJaWYgKGlwLT5pcF92ID09IDQpCisJCSAgICBu
 ZXRpc3JfcXVldWVfc3JjKE5FVElTUl9JUCwgKHVpbnRwdHJfdClzbywgbSk7CisjaWZkZWYg
 SU5FVDYKKwkJZWxzZQorCQkgICAgbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1JfSVBWNiwgKHVp
 bnRwdHJfdClzbywgbSk7CisjZW5kaWYKIAl9CiAKIAlyZXR1cm4gZXJyb3I7Ci0tLSBzeXMv
 bmV0aW5ldDYvbmQ2LmMub3JpZwkyMDExLTAzLTE1IDIwOjA4OjIzLjAwMDAwMDAwMCArMDMw
 MAorKysgc3lzL25ldGluZXQ2L25kNi5jCTIwMTEtMDMtMTUgMjA6MDg6MjMuMDAwMDAwMDAw
 ICswMzAwCkBAIC00NDIsNiArNDQyLDggQEAKIAlzdHJ1Y3QgaW42X2FkZHIgKmRzdDsKIAlz
 dHJ1Y3QgaWZuZXQgKmlmcDsKIAlzdHJ1Y3QgbmRfaWZpbmZvICpuZGkgPSBOVUxMOworCXN0
 cnVjdCBydF9hZGRyaW5mbyBydGluZm87CisJc3RydWN0IHNvY2thZGRyX2RsIGdhdGV3YXk7
 CiAKIAlLQVNTRVJUKGFyZyAhPSBOVUxMLCAoIiVzOiBhcmcgTlVMTCIsIF9fZnVuY19fKSk7
 CiAJbG4gPSAoc3RydWN0IGxsZW50cnkgKilhcmc7Ci0tLSBzeXMvbW9kdWxlcy9pcGRpdmVy
 dC9NYWtlZmlsZS5vcmlnCTIwMDktMDgtMDMgMTI6MTM6MDYuMDAwMDAwMDAwICswNDAwCisr
 KyBzeXMvbW9kdWxlcy9pcGRpdmVydC9NYWtlZmlsZQkyMDExLTAzLTE1IDIxOjE5OjMzLjAw
 MDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDExIEBACiAuUEFUSDogJHsuQ1VSRElSfS8uLi8u
 Li9uZXRpbmV0CiAKIEtNT0Q9ICAgaXBkaXZlcnQKLVNSQ1M9ICAgaXBfZGl2ZXJ0LmMKK1NS
 Q1M9ICAgaXBfZGl2ZXJ0LmMgb3B0X2luZXQ2LmgKKworLmlmICFkZWZpbmVkKEtFUk5CVUlM
 RERJUikKK29wdF9pbmV0Ni5oOgorCWVjaG8gIiNkZWZpbmUgSU5FVDYgMSIgPiAkey5UQVJH
 RVR9CisuZW5kaWYKIAogLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgo=
 --------------000004090805090308080905--

From: Sergey Matveychuk <sem33@yandex-team.ru>
To: bug-followup@FreeBSD.org, dan@obluda.cz
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Tue, 15 Mar 2011 22:06:28 +0300

 This is a multi-part message in MIME format.
 --------------030906040307050306030601
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Complete remove nd6.c part. I'll send it separately with explanations.
 
 --------------030906040307050306030601
 Content-Type: text/plain;
  name="divert-ipv6.diff"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="divert-ipv6.diff"
 
 LS0tIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5jLm9yaWcJMjAxMC0xMi0xMCAwODox
 ODozNy4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5j
 CTIwMTEtMDMtMTUgMjA6MDg6MjMuMDAwMDAwMDAwICswMzAwCkBAIC0yODksNyArMjg5LDcg
 QEAKIAkgKiB3ZSBjYW4gZG8gaXQgYmVmb3JlIGEgJ3RlZScuCiAJICovCiAJaXAgPSBtdG9k
 KGNsb25lLCBzdHJ1Y3QgaXAgKik7Ci0JaWYgKCF0ZWUgJiYgbnRvaHMoaXAtPmlwX29mZikg
 JiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgeworCWlmIChpcC0+aXBfdiA9PSA0ICYmICF0ZWUg
 JiYgbnRvaHMoaXAtPmlwX29mZikgJiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgewogCQlpbnQg
 aGxlbjsKIAkJc3RydWN0IG1idWYgKnJlYXNzOwogCi0tLSBzeXMvbmV0aW5ldC9pcF9kaXZl
 cnQuYy5vcmlnCTIwMTAtMDgtMjcgMjI6NTA6MTIuMDAwMDAwMDAwICswNDAwCisrKyBzeXMv
 bmV0aW5ldC9pcF9kaXZlcnQuYwkyMDExLTAzLTE1IDIxOjI0OjA2LjAwMDAwMDAwMCArMDMw
 MApAQCAtMzcsNiArMzcsNyBAQAogI2Vycm9yICJJUERJVkVSVCByZXF1aXJlcyBJTkVULiIK
 ICNlbmRpZgogI2VuZGlmCisjaW5jbHVkZSAib3B0X2luZXQ2LmgiCiAKICNpbmNsdWRlIDxz
 eXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+CkBAIC02OSw2ICs3MCw4IEBA
 CiAjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+
 CiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwNi5o
 PgorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KICNpZmRlZiBTQ1RQCiAjaW5jbHVk
 ZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+CiAjZW5kaWYKQEAgLTM4OSw3MSArMzkyLDEwMyBA
 QAogCS8qIFJlaW5qZWN0IHBhY2tldCBpbnRvIHRoZSBzeXN0ZW0gYXMgaW5jb21pbmcgb3Ig
 b3V0Z29pbmcgKi8KIAlpZiAoIXNpbiB8fCBzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7
 CiAJCXN0cnVjdCBpcCAqY29uc3QgaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKyNpZmRl
 ZiBJTkVUNgorCQlzdHJ1Y3QgaXA2X2hkciAqY29uc3QgaXA2ID0gbXRvZChtLCBzdHJ1Y3Qg
 aXA2X2hkciAqKTsKKyNlbmRpZgogCQlzdHJ1Y3QgaW5wY2IgKmlucDsKIAogCQlkdC0+aW5m
 byB8PSBJUEZXX0lTX0RJVkVSVCB8IElQRldfSU5GT19PVVQ7CiAJCWlucCA9IHNvdG9pbnBj
 Yihzbyk7CiAJCUlOUF9STE9DSyhpbnApOwotCQkvKgotCQkgKiBEb24ndCBhbGxvdyBib3Ro
 IHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRzb2Nrb3B0IG9wdGlvbnMsCi0JCSAqIGFuZCBkb24n
 dCBhbGxvdyBwYWNrZXQgbGVuZ3RoIHNpemVzIHRoYXQgd2lsbCBjcmFzaAotCQkgKi8KLQkJ
 aWYgKCgoaXAtPmlwX2hsICE9IChzaXplb2YgKCppcCkgPj4gMikpICYmIGlucC0+aW5wX29w
 dGlvbnMpIHx8Ci0JCSAgICAgKCh1X3Nob3J0KW50b2hzKGlwLT5pcF9sZW4pID4gbS0+bV9w
 a3RoZHIubGVuKSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlJTlBfUlVOTE9DSyhpbnAp
 OwotCQkJbV9mcmVlbShtKTsKLQkJfSBlbHNlIHsKKwkJaWYgKGlwLT5pcF92ID09IDQpIHsK
 KwkJCS8qCisJCQkgKiBEb24ndCBhbGxvdyBib3RoIHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRz
 b2Nrb3B0IG9wdGlvbnMsCisJCQkgKiBhbmQgZG9uJ3QgYWxsb3cgcGFja2V0IGxlbmd0aCBz
 aXplcyB0aGF0IHdpbGwgY3Jhc2gKKwkJCSAqLworCQkJaWYgKCgoaXAtPmlwX2hsICE9IChz
 aXplb2YgKCppcCkgPj4gMikpICYmIGlucC0+aW5wX29wdGlvbnMpIHx8CisJCQkgICAgICgo
 dV9zaG9ydCludG9ocyhpcC0+aXBfbGVuKSA+IG0tPm1fcGt0aGRyLmxlbikpIHsKKwkJCQll
 cnJvciA9IEVJTlZBTDsKKwkJCQlJTlBfUlVOTE9DSyhpbnApOworCQkJCWdvdG8gY2FudHNl
 bmQ7CisJCQl9CisKIAkJCS8qIENvbnZlcnQgZmllbGRzIHRvIGhvc3Qgb3JkZXIgZm9yIGlw
 X291dHB1dCgpICovCiAJCQlpcC0+aXBfbGVuID0gbnRvaHMoaXAtPmlwX2xlbik7CiAJCQlp
 cC0+aXBfb2ZmID0gbnRvaHMoaXAtPmlwX29mZik7CisJCX0KKyNpZmRlZiBJTkVUNgkJCisJ
 CWVsc2UKKwkJCWlmIChpcC0+aXBfdiA9PSA2KSB7CisJCQkgICAgLyogRG9uJ3QgYWxsb3cg
 cGFja2V0IGxlbmd0aCBzaXplcyB0aGF0IHdpbGwgY3Jhc2ggKi8KKwkJCSAgICBpZiAoKCh1
 X3Nob3J0KW50b2hzKGlwNi0+aXA2X3BsZW4pID4gbS0+bV9wa3RoZHIubGVuKSkgeworCQkJ
 CSAgICBlcnJvciA9IEVJTlZBTDsKKwkJCQkgICAgSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkg
 ICAgZ290byBjYW50c2VuZDsKKwkJCSAgICB9CisKKwkJCSAgICBpcDYtPmlwNl9wbGVuID0g
 bnRvaHMoaXA2LT5pcDZfcGxlbik7CisJCQl9CisjZW5kaWYKKwkJLyogVW5rbm93biBwcm90
 b2NvbCAqLworCQllbHNlIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJSU5QX1JVTkxPQ0so
 aW5wKTsKKwkJCWdvdG8gY2FudHNlbmQ7CisJCX0KIAotCQkJLyogU2VuZCBwYWNrZXQgdG8g
 b3V0cHV0IHByb2Nlc3NpbmcgKi8KLQkJCUtNT0RfSVBTVEFUX0lOQyhpcHNfcmF3b3V0KTsJ
 CS8qIFhYWCAqLworCQkvKiBTZW5kIHBhY2tldCB0byBvdXRwdXQgcHJvY2Vzc2luZyAqLwor
 CQlLTU9EX0lQU1RBVF9JTkMoaXBzX3Jhd291dCk7CQkvKiBYWFggKi8KIAogI2lmZGVmIE1B
 QwotCQkJbWFjX2lucGNiX2NyZWF0ZV9tYnVmKGlucCwgbSk7CisJCW1hY19pbnBjYl9jcmVh
 dGVfbWJ1ZihpbnAsIG0pOwogI2VuZGlmCi0JCQkvKgotCQkJICogR2V0IHJlYWR5IHRvIGlu
 amVjdCB0aGUgcGFja2V0IGludG8gaXBfb3V0cHV0KCkuCi0JCQkgKiBKdXN0IGluIGNhc2Ug
 c29ja2V0IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgb24gdGhlCi0JCQkgKiBkaXZlcnQgc29j
 a2V0LCB3ZSBkdXBsaWNhdGUgdGhlbS4gIFRoaXMgaXMgZG9uZQotCQkJICogdG8gYXZvaWQg
 aGF2aW5nIHRvIGhvbGQgdGhlIFBDQiBsb2NrcyBvdmVyIHRoZSBjYWxsCi0JCQkgKiB0byBp
 cF9vdXRwdXQoKSwgYXMgZG9pbmcgdGhpcyByZXN1bHRzIGluIGEgbnVtYmVyIG9mCi0JCQkg
 KiBsb2NrIG9yZGVyaW5nIGNvbXBsZXhpdGllcy4KLQkJCSAqCi0JCQkgKiBOb3RlIHRoYXQg
 d2Ugc2V0IHRoZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmd1bWVudCBmb3IKLQkJCSAqIGlwX291
 dHB1dCgpIHRvIE5VTEwgc2luY2UgaXQgc2hvdWxkIGJlIGludmFyaWFudCB0aGF0Ci0JCQkg
 KiB0aGV5IGFyZSBub3QgcHJlc2VudC4KLQkJCSAqLwotCQkJS0FTU0VSVChpbnAtPmlucF9t
 b3B0aW9ucyA9PSBOVUxMLAotCQkJICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEg
 ZGl2ZXJ0IHNvY2tldCIpKTsKLQkJCW9wdGlvbnMgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFhY
 WENTSlA6IEl0IGlzIHVuY2xlYXIgdG8gbWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKLQkJ
 CSAqIHNlbnNlIGZvciBkaXZlcnQgc29ja2V0cyB0byBoYXZlIG9wdGlvbnMuICBIb3dldmVy
 LAotCQkJICogZm9yIG5vdyB3ZSB3aWxsIGR1cGxpY2F0ZSB0aGVtIHdpdGggdGhlIElOUCBs
 b2NrcwotCQkJICogaGVsZCBzbyB3ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0
 aG91dAotCQkJICogcmVxdXJpbmcgYSByZWZlcmVuY2UgdG8gdGhlIHBjYi4KLQkJCSAqLwot
 CQkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVMTCkgewotCQkJCW9wdGlvbnMgPSBtX2R1
 cChpbnAtPmlucF9vcHRpb25zLCBNX0RPTlRXQUlUKTsKLQkJCQlpZiAob3B0aW9ucyA9PSBO
 VUxMKQotCQkJCQllcnJvciA9IEVOT0JVRlM7Ci0JCQl9Ci0JCQlJTlBfUlVOTE9DSyhpbnAp
 OwotCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCXJl
 dHVybiAoZXJyb3IpOwotCQkJfQotCQkJZXJyb3IgPSBpcF9vdXRwdXQobSwgb3B0aW9ucywg
 TlVMTCwKLQkJCSAgICAoKHNvLT5zb19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/Ci0JCQkg
 ICAgSVBfUk9VVEVUT0lGIDogMCkgfCBJUF9BTExPV0JST0FEQ0FTVCB8Ci0JCQkgICAgSVBf
 UkFXT1VUUFVULCBOVUxMLCBOVUxMKTsKLQkJCWlmIChvcHRpb25zICE9IE5VTEwpCi0JCQkJ
 bV9mcmVlbShvcHRpb25zKTsKKwkJLyoKKwkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUg
 cGFja2V0IGludG8gaXBfb3V0cHV0KCkuCisJCSAqIEp1c3QgaW4gY2FzZSBzb2NrZXQgb3B0
 aW9ucyB3ZXJlIHNwZWNpZmllZCBvbiB0aGUKKwkJICogZGl2ZXJ0IHNvY2tldCwgd2UgZHVw
 bGljYXRlIHRoZW0uICBUaGlzIGlzIGRvbmUKKwkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhv
 bGQgdGhlIFBDQiBsb2NrcyBvdmVyIHRoZSBjYWxsCisJCSAqIHRvIGlwX291dHB1dCgpLCBh
 cyBkb2luZyB0aGlzIHJlc3VsdHMgaW4gYSBudW1iZXIgb2YKKwkJICogbG9jayBvcmRlcmlu
 ZyBjb21wbGV4aXRpZXMuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIG11bHRp
 Y2FzdCBvcHRpb25zIGFyZ3VtZW50IGZvcgorCQkgKiBpcF9vdXRwdXQoKSB0byBOVUxMIHNp
 bmNlIGl0IHNob3VsZCBiZSBpbnZhcmlhbnQgdGhhdAorCQkgKiB0aGV5IGFyZSBub3QgcHJl
 c2VudC4KKwkJICovCisJCUtBU1NFUlQoaW5wLT5pbnBfbW9wdGlvbnMgPT0gTlVMTCwKKwkJ
 ICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKKwkJ
 b3B0aW9ucyA9IE5VTEw7CisJCS8qCisJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIgdG8g
 bWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKKwkJICogc2Vuc2UgZm9yIGRpdmVydCBzb2Nr
 ZXRzIHRvIGhhdmUgb3B0aW9ucy4gIEhvd2V2ZXIsCisJCSAqIGZvciBub3cgd2Ugd2lsbCBk
 dXBsaWNhdGUgdGhlbSB3aXRoIHRoZSBJTlAgbG9ja3MKKwkJICogaGVsZCBzbyB3ZSBjYW4g
 dXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0aG91dAorCQkgKiByZXF1cmluZyBhIHJlZmVy
 ZW5jZSB0byB0aGUgcGNiLgorCQkgKi8KKwkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVM
 TCkgeworCQkJb3B0aW9ucyA9IG1fZHVwKGlucC0+aW5wX29wdGlvbnMsIE1fRE9OVFdBSVQp
 OworCQkJaWYgKG9wdGlvbnMgPT0gTlVMTCkKKwkJCQllcnJvciA9IEVOT0JVRlM7CisJCX0K
 KwkJSU5QX1JVTkxPQ0soaW5wKTsKKwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCW1f
 ZnJlZW0obSk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQorCQlpZiAoaXAtPmlwX3YgPT0g
 NCkKKwkJICAgIGVycm9yID0gaXBfb3V0cHV0KG0sIG9wdGlvbnMsIE5VTEwsCisJCQkoKHNv
 LT5zb19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/CisJCQlJUF9ST1VURVRPSUYgOiAwKSB8
 IElQX0FMTE9XQlJPQURDQVNUIHwKKwkJCUlQX1JBV09VVFBVVCwgTlVMTCwgTlVMTCk7Cisj
 aWZkZWYgSU5FVDYKKwkJZWxzZQorCQkgICAgZXJyb3IgPSBpcDZfb3V0cHV0KG0sIE5VTEws
 IE5VTEwsIDAsIAorCQkJTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKwkJaWYgKG9wdGlv
 bnMgIT0gTlVMTCkKKwkJCW1fZnJlZW0ob3B0aW9ucyk7CiAJfSBlbHNlIHsKKwkJc3RydWN0
 IGlwICpjb25zdCBpcCA9IG10b2QobSwgc3RydWN0IGlwICopOworCiAJCWR0LT5pbmZvIHw9
 IElQRldfSVNfRElWRVJUIHwgSVBGV19JTkZPX0lOOwogCQlpZiAobS0+bV9wa3RoZHIucmN2
 aWYgPT0gTlVMTCkgewogCQkJLyoKQEAgLTQ3Nyw3ICs1MTIsMTIgQEAKIAkJbWFjX3NvY2tl
 dF9jcmVhdGVfbWJ1ZihzbywgbSk7CiAjZW5kaWYKIAkJLyogU2VuZCBwYWNrZXQgdG8gaW5w
 dXQgcHJvY2Vzc2luZyB2aWEgbmV0aXNyICovCi0JCW5ldGlzcl9xdWV1ZV9zcmMoTkVUSVNS
 X0lQLCAodWludHB0cl90KXNvLCBtKTsKKwkJaWYgKGlwLT5pcF92ID09IDQpCisJCSAgICBu
 ZXRpc3JfcXVldWVfc3JjKE5FVElTUl9JUCwgKHVpbnRwdHJfdClzbywgbSk7CisjaWZkZWYg
 SU5FVDYKKwkJZWxzZQorCQkgICAgbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1JfSVBWNiwgKHVp
 bnRwdHJfdClzbywgbSk7CisjZW5kaWYKIAl9CiAKIAlyZXR1cm4gZXJyb3I7Ci0tLSBzeXMv
 bW9kdWxlcy9pcGRpdmVydC9NYWtlZmlsZS5vcmlnCTIwMDktMDgtMDMgMTI6MTM6MDYuMDAw
 MDAwMDAwICswNDAwCisrKyBzeXMvbW9kdWxlcy9pcGRpdmVydC9NYWtlZmlsZQkyMDExLTAz
 LTE1IDIxOjE5OjMzLjAwMDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDExIEBACiAuUEFUSDog
 JHsuQ1VSRElSfS8uLi8uLi9uZXRpbmV0CiAKIEtNT0Q9ICAgaXBkaXZlcnQKLVNSQ1M9ICAg
 aXBfZGl2ZXJ0LmMKK1NSQ1M9ICAgaXBfZGl2ZXJ0LmMgb3B0X2luZXQ2LmgKKworLmlmICFk
 ZWZpbmVkKEtFUk5CVUlMRERJUikKK29wdF9pbmV0Ni5oOgorCWVjaG8gIiNkZWZpbmUgSU5F
 VDYgMSIgPiAkey5UQVJHRVR9CisuZW5kaWYKIAogLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgo=
 --------------030906040307050306030601--

From: Sergey Matveychuk <sem33@yandex-team.ru>
To: bug-followup@FreeBSD.org, dan@obluda.cz
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Tue, 15 Mar 2011 22:22:26 +0300

 This is a multi-part message in MIME format.
 --------------010900030501060304010402
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 7bit
 
 A patch to prevent looping when diverting packets from "to me" rule.
 
 Let's look at the rule:
 ipfw add divert NNN ip from any to me
 
 After a packet processed with a divert daemon it returns to output queue 
 and pass firewall again and diverted again and so on. It's a loop. You 
 can easily prevent it for IPv4:
 ipfw add divert NNN ip from any to me not via lo0
 
 But you could not do it with IPv6 because of it fool firewall by 
 changing interface name.
 
 The patch do the behaviour the same for both protocols.
 
 --------------010900030501060304010402
 Content-Type: text/plain;
  name="nd6.diff"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="nd6.diff"
 
 LS0tIHN5cy9uZXRpbmV0Ni9uZDYuYy5vcmlnCTIwMTEtMDItMjUgMTc6NDg6NTQuMDAwMDAw
 MDAwICswMzAwCisrKyBzeXMvbmV0aW5ldDYvbmQ2LmMJMjAxMS0wMi0yNSAxNzo0OTo1MS4w
 MDAwMDAwMDAgKzAzMDAKQEAgLTE5MjgsMTAgKzE5MjgsNiBAQAogCQl9CiAJCXJldHVybiAo
 ZXJyb3IpOwogCX0KLQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICE9IDAp
 IHsKLQkJcmV0dXJuICgoKmlmcC0+aWZfb3V0cHV0KShvcmlnaWZwLCBtLCAoc3RydWN0IHNv
 Y2thZGRyICopZHN0LAotCQkgICAgTlVMTCkpOwotCX0KIAllcnJvciA9ICgqaWZwLT5pZl9v
 dXRwdXQpKGlmcCwgbSwgKHN0cnVjdCBzb2NrYWRkciAqKWRzdCwgTlVMTCk7CiAJcmV0dXJu
 IChlcnJvcik7CiAK
 --------------010900030501060304010402--

From: Dan Lukes <dan@obluda.cz>
To: Sergey Matveychuk <sem33@yandex-team.ru>, bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Wed, 16 Mar 2011 02:00:43 +0100

 Hi Sergey.
 
 I'm so sorry not participating of your effort to solve this very old PR.
 
 It's not proper time for me just now to cooperate on this.
 
 Dan
 
State-Changed-From-To: open->patched 
State-Changed-By: ae 
State-Changed-When: Mon Jun 27 12:53:05 UTC 2011 
State-Changed-Why:  
Patched in head/ with r223593. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128260 
State-Changed-From-To: patched->closed 
State-Changed-By: ae 
State-Changed-When: Sat Jan 5 21:45:06 UTC 2013 
State-Changed-Why:  
Already merged to stable branch. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128260 
>Unformatted:
