linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] ipv6: fix tunnel error handling
@ 2015-11-03  7:51 Michal Kubecek
  2015-11-03 15:52 ` David Miller
  0 siblings, 1 reply; 2+ messages in thread
From: Michal Kubecek @ 2015-11-03  7:51 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, linux-kernel, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, Patrick McHardy, Kazunori MIYAZAWA

Both tunnel6_protocol and tunnel46_protocol share the same error
handler, tunnel6_err(), which traverses through tunnel6_handlers list.
For ipip6 tunnels, we need to traverse tunnel46_handlers as we do e.g.
in tunnel46_rcv(). Current code can generate an ICMPv6 error message
with an IPv4 packet embedded in it.

Fixes: 73d605d1abbd ("[IPSEC]: changing API of xfrm6_tunnel_register")
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
---
 net/ipv6/tunnel6.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/tunnel6.c b/net/ipv6/tunnel6.c
index 3c758007b327..dae25cad05cd 100644
--- a/net/ipv6/tunnel6.c
+++ b/net/ipv6/tunnel6.c
@@ -144,6 +144,16 @@ static void tunnel6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
 			break;
 }
 
+static void tunnel46_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
+			 u8 type, u8 code, int offset, __be32 info)
+{
+	struct xfrm6_tunnel *handler;
+
+	for_each_tunnel_rcu(tunnel46_handlers, handler)
+		if (!handler->err_handler(skb, opt, type, code, offset, info))
+			break;
+}
+
 static const struct inet6_protocol tunnel6_protocol = {
 	.handler	= tunnel6_rcv,
 	.err_handler	= tunnel6_err,
@@ -152,7 +162,7 @@ static const struct inet6_protocol tunnel6_protocol = {
 
 static const struct inet6_protocol tunnel46_protocol = {
 	.handler	= tunnel46_rcv,
-	.err_handler	= tunnel6_err,
+	.err_handler	= tunnel46_err,
 	.flags          = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
 };
 
-- 
2.6.2


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

* Re: [PATCH net] ipv6: fix tunnel error handling
  2015-11-03  7:51 [PATCH net] ipv6: fix tunnel error handling Michal Kubecek
@ 2015-11-03 15:52 ` David Miller
  0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2015-11-03 15:52 UTC (permalink / raw)
  To: mkubecek; +Cc: netdev, linux-kernel, kuznet, jmorris, yoshfuji, kaber, miyazawa

From: Michal Kubecek <mkubecek@suse.cz>
Date: Tue,  3 Nov 2015 08:51:07 +0100 (CET)

> Both tunnel6_protocol and tunnel46_protocol share the same error
> handler, tunnel6_err(), which traverses through tunnel6_handlers list.
> For ipip6 tunnels, we need to traverse tunnel46_handlers as we do e.g.
> in tunnel46_rcv(). Current code can generate an ICMPv6 error message
> with an IPv4 packet embedded in it.
> 
> Fixes: 73d605d1abbd ("[IPSEC]: changing API of xfrm6_tunnel_register")
> Signed-off-by: Michal Kubecek <mkubecek@suse.cz>

Good catch, applied and queued up for -stable.

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

end of thread, other threads:[~2015-11-03 15:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-03  7:51 [PATCH net] ipv6: fix tunnel error handling Michal Kubecek
2015-11-03 15:52 ` David Miller

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).