summaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_tunnel.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.osdl.org>2006-11-21 18:36:59 -0800
committerLinus Torvalds <torvalds@woody.osdl.org>2006-11-21 18:36:59 -0800
commitc5dd27337a70b34cc400120e70a80fcb84c4fd7a (patch)
tree5c41d10ecb9169b9c3dd31a9cdad6af3b6f974b2 /net/ipv6/ip6_tunnel.c
parent6af6e1efb161ffe36e718b1fd58385710879af7c (diff)
parent12862086f24d7382b24379bbcbe0dadf12ca5945 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [TG3]: Add missing unlock in tg3_open() error path. [IPV6]: Fix address/interface handling in UDP and DCCP, according to the scoping architecture. [IRDA]: Lockdep fix. [BLUETOOTH]: Fix unaligned access in hci_send_to_sock. [XFRM]: nlmsg length not computed correctly in the presence of subpolicies [XFRM]: Sub-policies broke policy events [IGMP]: Fix IGMPV3_EXP() normalization bit shift value. [Bluetooth] Ignore L2CAP config requests on disconnect [Bluetooth] Always include MTU in L2CAP config responses [Bluetooth] Check if RFCOMM session is still attached to the TTY [Bluetooth] Handling pending connect attempts after inquiry [Bluetooth] Attach low-level connections to the Bluetooth bus [IPV6] IP6TUNNEL: Add missing nf_reset() on input path. [IPV6] IP6TUNNEL: Delete all tunnel device when unloading module. [IPV6] ROUTE: Do not enable router reachability probing in router mode. [IPV6] ROUTE: Prefer reachable nexthop only if the caller requests. [IPV6] ROUTE: Try to use router which is not known unreachable.
Diffstat (limited to 'net/ipv6/ip6_tunnel.c')
-rw-r--r--net/ipv6/ip6_tunnel.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 84d7ebdb9d2..b9f40290d12 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -542,6 +542,7 @@ ip6ip6_rcv(struct sk_buff *skb)
skb->dev = t->dev;
dst_release(skb->dst);
skb->dst = NULL;
+ nf_reset(skb);
if (t->parms.flags & IP6_TNL_F_RCV_DSCP_COPY)
ipv6_copy_dscp(ipv6h, skb->nh.ipv6h);
ip6ip6_ecn_decapsulate(ipv6h, skb);
@@ -1149,6 +1150,20 @@ fail:
return err;
}
+static void __exit ip6ip6_destroy_tunnels(void)
+{
+ int h;
+ struct ip6_tnl *t;
+
+ for (h = 0; h < HASH_SIZE; h++) {
+ while ((t = tnls_r_l[h]) != NULL)
+ unregister_netdevice(t->dev);
+ }
+
+ t = tnls_wc[0];
+ unregister_netdevice(t->dev);
+}
+
/**
* ip6_tunnel_cleanup - free resources and unregister protocol
**/
@@ -1158,7 +1173,9 @@ static void __exit ip6_tunnel_cleanup(void)
if (xfrm6_tunnel_deregister(&ip6ip6_handler))
printk(KERN_INFO "ip6ip6 close: can't deregister tunnel\n");
- unregister_netdev(ip6ip6_fb_tnl_dev);
+ rtnl_lock();
+ ip6ip6_destroy_tunnels();
+ rtnl_unlock();
}
module_init(ip6_tunnel_init);