]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
vti6: fix uninit when using x-netns
authorYao Xiwei <xiwei.yao@6wind.com>
Thu, 2 Apr 2015 15:31:17 +0000 (17:31 +0200)
committerLuis Henriques <luis.henriques@canonical.com>
Wed, 6 May 2015 10:33:05 +0000 (11:33 +0100)
commit 092a29a40bab8bb4530bb3e58a0597001cdecdef upstream.

When the kernel deleted a vti6 interface, this interface was not removed from
the tunnels list. Thus, when the ip6_vti module was removed, this old interface
was found and the kernel tried to delete it again. This was leading to a kernel
panic.

Fixes: 61220ab34948 ("vti6: Enable namespace changing")
Signed-off-by: Yao Xiwei <xiwei.yao@6wind.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
net/ipv6/ip6_vti.c

index 7c6e6bfb1b0fc2160e0d5cd6ebb973bbfe3bc942..4e083dab744554019b69bd77b09f920c09c9642e 100644 (file)
@@ -267,8 +267,7 @@ static struct ip6_tnl *vti6_locate(struct net *net, struct __ip6_tnl_parm *p,
 static void vti6_dev_uninit(struct net_device *dev)
 {
        struct ip6_tnl *t = netdev_priv(dev);
-       struct net *net = dev_net(dev);
-       struct vti6_net *ip6n = net_generic(net, vti6_net_id);
+       struct vti6_net *ip6n = net_generic(t->net, vti6_net_id);
 
        if (dev == ip6n->fb_tnl_dev)
                RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);