* [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu
@ 2013-08-26 10:31 Hannes Frederic Sowa
2013-08-27 9:22 ` Steffen Klassert
0 siblings, 1 reply; 3+ messages in thread
From: Hannes Frederic Sowa @ 2013-08-26 10:31 UTC (permalink / raw)
To: netdev; +Cc: steffen.klassert
In commit 0ea9d5e3e0e03a63b11392f5613378977dae7eca ("xfrm: introduce
helper for safe determination of mtu") I switched the determination of
ipv4 mtus from dst_mtu to ip_skb_dst_mtu. This was an error because in
case of IP_PMTUDISC_PROBE we fall back to the interface mtu, which is
never correct for ipv4 ipsec.
This patch partly reverts 0ea9d5e3e0e03a63b11392f5613378977dae7eca
("xfrm: introduce helper for safe determination of mtu").
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
include/net/xfrm.h | 12 ------------
net/ipv4/xfrm4_output.c | 2 +-
net/ipv6/xfrm6_output.c | 8 +++++---
3 files changed, 6 insertions(+), 16 deletions(-)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index ac5b025..e823786 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -20,7 +20,6 @@
#include <net/route.h>
#include <net/ipv6.h>
#include <net/ip6_fib.h>
-#include <net/ip6_route.h>
#include <net/flow.h>
#include <linux/interrupt.h>
@@ -1724,15 +1723,4 @@ static inline int xfrm_mark_put(struct sk_buff *skb, const struct xfrm_mark *m)
return ret;
}
-static inline int xfrm_skb_dst_mtu(struct sk_buff *skb)
-{
- struct sock *sk = skb->sk;
-
- if (sk && skb->protocol == htons(ETH_P_IPV6))
- return ip6_skb_dst_mtu(skb);
- else if (sk && skb->protocol == htons(ETH_P_IP))
- return ip_skb_dst_mtu(skb);
- return dst_mtu(skb_dst(skb));
-}
-
#endif /* _NET_XFRM_H */
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c
index 80baf4a..baa0f63 100644
--- a/net/ipv4/xfrm4_output.c
+++ b/net/ipv4/xfrm4_output.c
@@ -28,7 +28,7 @@ static int xfrm4_tunnel_check_size(struct sk_buff *skb)
if (!(ip_hdr(skb)->frag_off & htons(IP_DF)) || skb->local_df)
goto out;
- mtu = xfrm_skb_dst_mtu(skb);
+ mtu = dst_mtu(skb_dst(skb));
if (skb->len > mtu) {
if (skb->sk)
xfrm_local_error(skb, mtu);
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
index e092e30..6cd625e 100644
--- a/net/ipv6/xfrm6_output.c
+++ b/net/ipv6/xfrm6_output.c
@@ -140,10 +140,12 @@ static int __xfrm6_output(struct sk_buff *skb)
{
struct dst_entry *dst = skb_dst(skb);
struct xfrm_state *x = dst->xfrm;
- int mtu = xfrm_skb_dst_mtu(skb);
+ int mtu;
- if (mtu < IPV6_MIN_MTU)
- mtu = IPV6_MIN_MTU;
+ if (skb->protocol == htons(ETH_P_IPV6))
+ mtu = ip6_skb_dst_mtu(skb);
+ else
+ mtu = dst_mtu(skb_dst(skb));
if (skb->len > mtu && xfrm6_local_dontfrag(skb)) {
xfrm6_local_rxpmtu(skb, mtu);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu
2013-08-26 10:31 [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu Hannes Frederic Sowa
@ 2013-08-27 9:22 ` Steffen Klassert
0 siblings, 0 replies; 3+ messages in thread
From: Steffen Klassert @ 2013-08-27 9:22 UTC (permalink / raw)
To: Hannes Frederic Sowa; +Cc: netdev
On Mon, Aug 26, 2013 at 12:31:19PM +0200, Hannes Frederic Sowa wrote:
> In commit 0ea9d5e3e0e03a63b11392f5613378977dae7eca ("xfrm: introduce
> helper for safe determination of mtu") I switched the determination of
> ipv4 mtus from dst_mtu to ip_skb_dst_mtu. This was an error because in
> case of IP_PMTUDISC_PROBE we fall back to the interface mtu, which is
> never correct for ipv4 ipsec.
>
> This patch partly reverts 0ea9d5e3e0e03a63b11392f5613378977dae7eca
> ("xfrm: introduce helper for safe determination of mtu").
>
> Cc: Steffen Klassert <steffen.klassert@secunet.com>
> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Applied to ipsec.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Problematic commits in the ipsec tree
@ 2013-08-22 10:47 Steffen Klassert
2013-08-22 19:53 ` [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu Hannes Frederic Sowa
0 siblings, 1 reply; 3+ messages in thread
From: Steffen Klassert @ 2013-08-22 10:47 UTC (permalink / raw)
To: Hannes Frederic Sowa; +Cc: David Miller, netdev
Hannes,
I have two problematic commits from you in the ipsec tree. The first one is:
commit 0ea9d5e3e (xfrm: introduce helper for safe determination of mtu)
This breakes pmtu discovery for IPv4 because now we use the device mtu
instead of the reduced IPsec mtu in xfrm4_tunnel_check_size() if a IPv4
socket is at the skb.
The second is:
commit 844d48746 (xfrm: choose protocol family by skb protocol)
This breaks pmtu discovery for IPv6 too because skb->protocol can be null
in __xfrm6_output().
We need a solution soon, or I have to revert or remove these commits from
the ipsec tree.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu
2013-08-22 10:47 Problematic commits in the ipsec tree Steffen Klassert
@ 2013-08-22 19:53 ` Hannes Frederic Sowa
0 siblings, 0 replies; 3+ messages in thread
From: Hannes Frederic Sowa @ 2013-08-22 19:53 UTC (permalink / raw)
To: Steffen Klassert; +Cc: David Miller, netdev
In commit 0ea9d5e3e0e03a63b11392f5613378977dae7eca ("xfrm: introduce
helper for safe determination of mtu") I switched the determination of
ipv4 mtus from dst_mtu to ip_skb_dst_mtu. This was an error because in
case of IP_PMTUDISC_PROBE we fall back to the interface mtu, which is
never correct for ipv4 ipsec.
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
include/net/xfrm.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index ac5b025..65d3529 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1730,8 +1730,6 @@ static inline int xfrm_skb_dst_mtu(struct sk_buff *skb)
if (sk && skb->protocol == htons(ETH_P_IPV6))
return ip6_skb_dst_mtu(skb);
- else if (sk && skb->protocol == htons(ETH_P_IP))
- return ip_skb_dst_mtu(skb);
return dst_mtu(skb_dst(skb));
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-08-27 9:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-26 10:31 [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu Hannes Frederic Sowa
2013-08-27 9:22 ` Steffen Klassert
-- strict thread matches above, loose matches on Subject: below --
2013-08-22 10:47 Problematic commits in the ipsec tree Steffen Klassert
2013-08-22 19:53 ` [PATCH ipsec 1/2] xfrm: revert ipv4 mtu determination to dst_mtu Hannes Frederic Sowa
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.