Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Oct 2014 22:05:12 +0200
From:      =?UTF-8?Q?Ermal_Lu=C3=A7i?= <eri@freebsd.org>
To:        Matthew Grooms <mgrooms@shrew.net>
Cc:        freebsd-net <freebsd-net@freebsd.org>
Subject:   Re: Broken IPsec + enc +pf/ipfw
Message-ID:  <CAPBZQG0iydAA-jhEDdk5ZhGnATm2Pn_okSh21DrsO7kf_g16Zg@mail.gmail.com>
In-Reply-To: <54480578.6020106@shrew.net>
References:  <544535C2.9020301@shrew.net> <544566D2.40303@FreeBSD.org> <544569CF.2060905@shrew.net> <54457599.4060102@yandex.ru> <54458001.6000507@shrew.net> <544611F8.9070403@yandex.ru> <20141021160643.GB2787@1970jan1-epo.ch> <54468B43.40602@shrew.net> <20141021183919.GD2787@1970jan1-epo.ch> <54480578.6020106@shrew.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 22, 2014 at 9:28 PM, Matthew Grooms <mgrooms@shrew.net> wrote:

> On 10/21/2014 1:39 PM, Kyle Williams wrote:
>
>> On Tue Oct 21 11:35:15 2014, Matthew Grooms wrote:
>>
>>> Hey Kyle,
>>>
>>> Thanks for lending a hand. I tested a few myself last night but had no
>>> luck. This morning I received an email off list that pointed to a patch
>>> that was merged to 10 stable. It sounds promising ...
>>>
>>> Log:
>>>    Merge r263091: fix mbuf flags clash that lead to failure of operation
>>>    of IPSEC and packet filters.
>>>
>>> https://lists.freebsd.org/pipermail/svn-src-stable-10/
>>> 2014-March/001111.html
>>>
>>> I won't have a chance to try it until after business hours tonight, but
>>> will report back to the list with my results. Alternately, I assume you
>>> also could upgrade to 10.1-RC2 as the MFC for this patch happened back
>>> in March. I may go this route myself and then bump up to RELEASE in a
>>> few weeks when it happens.
>>>
>>
>> r263091, r266800, and r272695 together on 10.0-RELENG works for me.
>>
>> I didn't test r263091 by itself.
>>
>>
> I couldn't get a kernel to boot without crashing with the single patch,
> (r263091) applied. With all three patches, I can also confirm that the
> problem is resolved.
>
> And some additional info: I also experimented with using gif + IPsec
> transport mode instead of enc + IPsec tunnel mode. I was hoping that
> changing the configuration would work around the issue. Unfortunately, gif
> + IPsec transport mode was exhibiting the same type of problems that enc +
> IPsec tunnel mode was, even with a patched kernel ( pf doesn't see the
> traffic on the gif interface so return traffic gets blocked for lack of a
> state entry ).
>
>
The below patch should fix your issue.

diff --git a/sys/netipsec/ipsec_input.c b/sys/netipsec/ipsec_input.c
index 15d5bae..c31034a 100644
--- a/sys/netipsec/ipsec_input.c
+++ b/sys/netipsec/ipsec_input.c
@@ -472,11 +472,11 @@ ipsec4_common_input_cb(struct mbuf *m, struct
secasvar *sav,
 	 * Pass the mbuf to enc0 for bpf and pfil. We will filter the IPIP
 	 * packet later after it has been decapsulated.
 	 */
-	ipsec_bpf(m, sav, AF_INET, ENC_IN|ENC_BEFORE);
+	ipsec_bpf(m, sav, AF_INET, saidx->mode == IPSEC_MODE_TRANSPORT ?
ENC_IN|ENC_AFTER : ENC_IN|ENC_BEFORE);
  	if (prot != IPPROTO_IPIP)
 		if ((error = ipsec_filter(&m, &sav->sah->saidx, PFIL_IN,
-			ENC_IN|ENC_BEFORE)) != 0)
+			saidx->mode == IPSEC_MODE_TRANSPORT ? ENC_IN|ENC_AFTER :
ENC_IN|ENC_BEFORE)) != 0)
 			return (error);
 #endif
 @@ -727,12 +727,12 @@ ipsec6_common_input_cb(struct mbuf *m, struct
secasvar *sav, int skip, int proto
 	 * Pass the mbuf to enc0 for bpf and pfil. We will filter the IPIP
 	 * packet later after it has been decapsulated.
 	 */
-	ipsec_bpf(m, sav, AF_INET6, ENC_IN|ENC_BEFORE);
+	ipsec_bpf(m, sav, AF_INET6, saidx->mode == IPSEC_MODE_TRANSPORT ?
ENC_IN|ENC_AFTER : ENC_IN|ENC_BEFORE);
  	/* XXX-BZ does not make sense. */
 	if (prot != IPPROTO_IPIP)
 		if ((error = ipsec_filter(&m, &sav->sah->saidx, PFIL_IN,
-			ENC_IN|ENC_BEFORE)) != 0)
+			saidx->mode == IPSEC_MODE_TRANSPORT ? ENC_IN|ENC_AFTER :
ENC_IN|ENC_BEFORE)) != 0)
 			return (error);
 #endif



> Thanks,
>
> -Matthew
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>



-- 
Ermal



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPBZQG0iydAA-jhEDdk5ZhGnATm2Pn_okSh21DrsO7kf_g16Zg>