netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] sctp: IPsec rules are ineffective with ipv6
@ 2010-01-27 14:12 Nicolas Dichtel
  2010-01-28 13:51 ` David Miller
  0 siblings, 1 reply; 7+ messages in thread
From: Nicolas Dichtel @ 2010-01-27 14:12 UTC (permalink / raw)
  To: netdev, Vlad Yasevich, linux-sctp

[-- Attachment #1: Type: text/plain, Size: 165 bytes --]

xfrm_lookup() is missing in sctp_v6_xmit(), add it.

Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

[-- Attachment #2: x.diff --]
[-- Type: text/x-diff, Size: 708 bytes --]

diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index cc50fbe..f24e23c 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -197,8 +197,10 @@ out:
 static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport)
 {
 	struct sock *sk = skb->sk;
+	struct dst_entry *dst = skb_dst(skb);
 	struct ipv6_pinfo *np = inet6_sk(sk);
 	struct flowi fl;
+	int err;
 
 	memset(&fl, 0, sizeof(fl));
 
@@ -231,6 +233,9 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport)
 	if (!(transport->param_flags & SPP_PMTUD_ENABLE))
 		skb->local_df = 1;
 
+	if ((err = xfrm_lookup(sock_net(sk), &dst, &fl, sk, 0)) < 0)
+		return err;
+
 	return ip6_xmit(sk, skb, &fl, np->opt, 0);
 }
 

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] sctp: IPsec rules are ineffective with ipv6
  2010-01-27 14:12 [PATCH] sctp: IPsec rules are ineffective with ipv6 Nicolas Dichtel
@ 2010-01-28 13:51 ` David Miller
  2010-01-28 15:24   ` Vlad Yasevich
  0 siblings, 1 reply; 7+ messages in thread
From: David Miller @ 2010-01-28 13:51 UTC (permalink / raw)
  To: nicolas.dichtel; +Cc: netdev, vladislav.yasevich, linux-sctp

From: Nicolas Dichtel <nicolas.dichtel@dev.6wind.com>
Date: Wed, 27 Jan 2010 15:12:59 +0100

> xfrm_lookup() is missing in sctp_v6_xmit(), add it.
> 
> Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

Doing this every transmit packet is overkill.

Whatever calculates the route that ends up in skb_dst(skb)
should be making this xfrm_lookup() call, not here.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] sctp: IPsec rules are ineffective with ipv6
  2010-01-28 13:51 ` David Miller
@ 2010-01-28 15:24   ` Vlad Yasevich
  2010-01-28 15:41     ` Nicolas Dichtel
  0 siblings, 1 reply; 7+ messages in thread
From: Vlad Yasevich @ 2010-01-28 15:24 UTC (permalink / raw)
  To: David Miller; +Cc: nicolas.dichtel, netdev, linux-sctp



David Miller wrote:
> From: Nicolas Dichtel <nicolas.dichtel@dev.6wind.com>
> Date: Wed, 27 Jan 2010 15:12:59 +0100
> 
>> xfrm_lookup() is missing in sctp_v6_xmit(), add it.
>>
>> Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> 
> Doing this every transmit packet is overkill.
> 
> Whatever calculates the route that ends up in skb_dst(skb)
> should be making this xfrm_lookup() call, not here.
> 


Hmm.. Interesting.  Looks like ip_route_output_key() will
do xfrm_lookup for you, but there is no ipv6 route lookup call
that will do the same thing.

I guess we'll need to add an xfrm_lookup call in sctp_v6_get_dst().

-vlad

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] sctp: IPsec rules are ineffective with ipv6
  2010-01-28 15:24   ` Vlad Yasevich
@ 2010-01-28 15:41     ` Nicolas Dichtel
  2010-01-28 16:36       ` Vlad Yasevich
  0 siblings, 1 reply; 7+ messages in thread
From: Nicolas Dichtel @ 2010-01-28 15:41 UTC (permalink / raw)
  To: Vlad Yasevich; +Cc: David Miller, netdev, linux-sctp

[-- Attachment #1: Type: text/plain, Size: 1019 bytes --]

What about this one?

Only compilation tested.

xfrm_lookup() is missing in IPv6 output path. Call it when dst is build. Initial 
patch was written by Junwei Zhang <junwei.zhang@6wind.com>

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

Le 28.01.2010 16:24, Vlad Yasevich a écrit :
> 
> David Miller wrote:
>> From: Nicolas Dichtel <nicolas.dichtel@dev.6wind.com>
>> Date: Wed, 27 Jan 2010 15:12:59 +0100
>>
>>> xfrm_lookup() is missing in sctp_v6_xmit(), add it.
>>>
>>> Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
>>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>> Doing this every transmit packet is overkill.
>>
>> Whatever calculates the route that ends up in skb_dst(skb)
>> should be making this xfrm_lookup() call, not here.
>>
> 
> 
> Hmm.. Interesting.  Looks like ip_route_output_key() will
> do xfrm_lookup for you, but there is no ipv6 route lookup call
> that will do the same thing.
> 
> I guess we'll need to add an xfrm_lookup call in sctp_v6_get_dst().
> 
> -vlad

[-- Attachment #2: x2.diff --]
[-- Type: text/x-diff, Size: 810 bytes --]

diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index cc50fbe..4081ffb 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -258,13 +258,14 @@ static struct dst_entry *sctp_v6_get_dst(struct sctp_association *asoc,
 	}
 
 	dst = ip6_route_output(&init_net, NULL, &fl);
-	if (!dst->error) {
-		struct rt6_info *rt;
-		rt = (struct rt6_info *)dst;
-		SCTP_DEBUG_PRINTK("rt6_dst:%pI6 rt6_src:%pI6\n",
-			&rt->rt6i_dst.addr, &rt->rt6i_src.addr);
-		return dst;
-	}
+	if (!dst->error)
+		if (xfrm_lookup(&init_net, &dst, &fl, asoc ? asoc->base.sk : NULL, 0) >= 0) {
+			struct rt6_info *rt;
+			rt = (struct rt6_info *)dst;
+			SCTP_DEBUG_PRINTK("rt6_dst:%pI6 rt6_src:%pI6\n",
+				&rt->rt6i_dst.addr, &rt->rt6i_src.addr);
+			return dst;
+		}
 	SCTP_DEBUG_PRINTK("NO ROUTE\n");
 	dst_release(dst);
 	return NULL;

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] sctp: IPsec rules are ineffective with ipv6
  2010-01-28 15:41     ` Nicolas Dichtel
@ 2010-01-28 16:36       ` Vlad Yasevich
  2010-01-28 18:25         ` Nicolas Dichtel
  0 siblings, 1 reply; 7+ messages in thread
From: Vlad Yasevich @ 2010-01-28 16:36 UTC (permalink / raw)
  To: nicolas.dichtel; +Cc: David Miller, netdev, linux-sctp



Nicolas Dichtel wrote:
> What about this one?
> 
> Only compilation tested.
> 
> xfrm_lookup() is missing in IPv6 output path. Call it when dst is build.
> Initial patch was written by Junwei Zhang <junwei.zhang@6wind.com>
> 
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

Looks like it might do the right thing.  Please run your tests
on this an let me.

Thanks
-vlad

> 
> Le 28.01.2010 16:24, Vlad Yasevich a écrit :
>>
>> David Miller wrote:
>>> From: Nicolas Dichtel <nicolas.dichtel@dev.6wind.com>
>>> Date: Wed, 27 Jan 2010 15:12:59 +0100
>>>
>>>> xfrm_lookup() is missing in sctp_v6_xmit(), add it.
>>>>
>>>> Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
>>>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>>> Doing this every transmit packet is overkill.
>>>
>>> Whatever calculates the route that ends up in skb_dst(skb)
>>> should be making this xfrm_lookup() call, not here.
>>>
>>
>>
>> Hmm.. Interesting.  Looks like ip_route_output_key() will
>> do xfrm_lookup for you, but there is no ipv6 route lookup call
>> that will do the same thing.
>>
>> I guess we'll need to add an xfrm_lookup call in sctp_v6_get_dst().
>>
>> -vlad



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] sctp: IPsec rules are ineffective with ipv6
  2010-01-28 16:36       ` Vlad Yasevich
@ 2010-01-28 18:25         ` Nicolas Dichtel
  2010-01-29  2:03           ` Wei Yongjun
  0 siblings, 1 reply; 7+ messages in thread
From: Nicolas Dichtel @ 2010-01-28 18:25 UTC (permalink / raw)
  To: Vlad Yasevich; +Cc: David Miller, netdev, linux-sctp

Hmm, seems to not work.
Problem is that we may have a NULL saddr in sctp_v6_get_dst().
What about adding a new handler in struct sctp_af, like get_xfrm_dst() that will 
be called after get_saddr()? In case of IPv4, it will not do anything.


Regards,
Nicolas

Le 28.01.2010 17:36, Vlad Yasevich a écrit :
> 
> Nicolas Dichtel wrote:
>> What about this one?
>>
>> Only compilation tested.
>>
>> xfrm_lookup() is missing in IPv6 output path. Call it when dst is build.
>> Initial patch was written by Junwei Zhang <junwei.zhang@6wind.com>
>>
>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> 
> Looks like it might do the right thing.  Please run your tests
> on this an let me.
> 
> Thanks
> -vlad
> 
>> Le 28.01.2010 16:24, Vlad Yasevich a écrit :
>>> David Miller wrote:
>>>> From: Nicolas Dichtel <nicolas.dichtel@dev.6wind.com>
>>>> Date: Wed, 27 Jan 2010 15:12:59 +0100
>>>>
>>>>> xfrm_lookup() is missing in sctp_v6_xmit(), add it.
>>>>>
>>>>> Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
>>>>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>>>> Doing this every transmit packet is overkill.
>>>>
>>>> Whatever calculates the route that ends up in skb_dst(skb)
>>>> should be making this xfrm_lookup() call, not here.
>>>>
>>>
>>> Hmm.. Interesting.  Looks like ip_route_output_key() will
>>> do xfrm_lookup for you, but there is no ipv6 route lookup call
>>> that will do the same thing.
>>>
>>> I guess we'll need to add an xfrm_lookup call in sctp_v6_get_dst().
>>>
>>> -vlad
> 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] sctp: IPsec rules are ineffective with ipv6
  2010-01-28 18:25         ` Nicolas Dichtel
@ 2010-01-29  2:03           ` Wei Yongjun
  0 siblings, 0 replies; 7+ messages in thread
From: Wei Yongjun @ 2010-01-29  2:03 UTC (permalink / raw)
  To: nicolas.dichtel; +Cc: Vlad Yasevich, David Miller, netdev, linux-sctp

Nicolas Dichtel wrote:
> Hmm, seems to not work.
> Problem is that we may have a NULL saddr in sctp_v6_get_dst().
> What about adding a new handler in struct sctp_af, like get_xfrm_dst()
> that will be called after get_saddr()? In case of IPv4, it will not do
> anything.

This would work for transmit SCTP packet under IPSEC, the
problem is that we can not get the correct PMTU for the
transport.Under IPv4, both transmit and the PMTU is correct.

>
>
> Regards,
> Nicolas
>
> Le 28.01.2010 17:36, Vlad Yasevich a écrit :
>>
>> Nicolas Dichtel wrote:
>>> What about this one?
>>>
>>> Only compilation tested.
>>>
>>> xfrm_lookup() is missing in IPv6 output path. Call it when dst is
>>> build.
>>> Initial patch was written by Junwei Zhang <junwei.zhang@6wind.com>
>>>
>>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>>
>> Looks like it might do the right thing.  Please run your tests
>> on this an let me.
>>
>> Thanks
>> -vlad
>>
>>> Le 28.01.2010 16:24, Vlad Yasevich a écrit :
>>>> David Miller wrote:
>>>>> From: Nicolas Dichtel <nicolas.dichtel@dev.6wind.com>
>>>>> Date: Wed, 27 Jan 2010 15:12:59 +0100
>>>>>
>>>>>> xfrm_lookup() is missing in sctp_v6_xmit(), add it.
>>>>>>
>>>>>> Signed-off-by: Junwei Zhang <junwei.zhang@6wind.com>
>>>>>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>>>>> Doing this every transmit packet is overkill.
>>>>>
>>>>> Whatever calculates the route that ends up in skb_dst(skb)
>>>>> should be making this xfrm_lookup() call, not here.
>>>>>
>>>>
>>>> Hmm.. Interesting.  Looks like ip_route_output_key() will
>>>> do xfrm_lookup for you, but there is no ipv6 route lookup call
>>>> that will do the same thing.
>>>>
>>>> I guess we'll need to add an xfrm_lookup call in sctp_v6_get_dst().
>>>>
>>>> -vlad
>>
>>
> -- 
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-01-29  2:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-27 14:12 [PATCH] sctp: IPsec rules are ineffective with ipv6 Nicolas Dichtel
2010-01-28 13:51 ` David Miller
2010-01-28 15:24   ` Vlad Yasevich
2010-01-28 15:41     ` Nicolas Dichtel
2010-01-28 16:36       ` Vlad Yasevich
2010-01-28 18:25         ` Nicolas Dichtel
2010-01-29  2:03           ` Wei Yongjun

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).