Patch "ipv6: fix memory leak with multiple tables during netns destruction" has been added to the 4.13-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
ipv6: fix memory leak with multiple tables during netns destruction
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ipv6-fix-memory-leak-with-multiple-tables-during-netns-destruction.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Sep 14 23:20:44 PDT 2017
From: Sabrina Dubroca <[email protected]>
Date: Fri, 8 Sep 2017 10:26:19 +0200
Subject: ipv6: fix memory leak with multiple tables during netns destruction
From: Sabrina Dubroca <[email protected]>
[ Upstream commit ba1cc08d9488c94cb8d94f545305688b72a2a300 ]
fib6_net_exit only frees the main and local tables. If another table was created with fib6_alloc_table, we leak it when the netns is destroyed.
Fix this in the same way ip_fib_net_exit cleans up tables, by walking through the whole hashtable of fib6_table's. We can get rid of the special cases for local and main, since they're also part of the hashtable.
Reproducer:
ip netns add x
ip -net x -6 rule add from 6003:1::/64 table 100 ip netns del x
--- net/ipv6/ip6_fib.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-)
net/ipv6/ip6_fib.c +19 -6
@@ -198,6 +198,12 @@ static void rt6_release(struct rt6_info } } +static void fib6_free_table (struct fib6_table *table) +{ +inetpeer_invalidate_tree (&table->tb6_peers); +kfree (table); +} +static void fib6_link_table (struct net *net,struct fib6_table *tb) {unsigned int h;
@@ -1915,15 +1921,22 @@ out_timer:static void fib6_net_exit (struct net *net) { +unsigned int i; +rt6_ifdown (net,NULL );del_timer_sync (&net->ipv6.ip6_fib_timer); -#ifdef CONFIG_IPV6_MULTIPLE_TABLES -inetpeer_invalidate_tree (&net->ipv6.fib6_local_tbl->tb6_peers); -kfree (net->ipv6.fib6_local_tbl); -#endif -inetpeer_invalidate_tree (&net->ipv6.fib6_main_tbl->tb6_peers); -kfree (net->ipv6.fib6_main_tbl); +for (i =0 ; i <FIB_TABLE_HASHSZ ; i++) { +struct hlist_head *head = &net->ipv6.fib_table_hash[i]; +struct hlist_node *tmp; +struct fib6_table *tb; + +hlist_for_each_entry_safe (tb, tmp, head, tb6_hlist) { +hlist_del (&tb->tb6_hlist); +fib6_free_table (tb); + } + } +kfree (net->ipv6.fib_table_hash);kfree (net->ipv6.rt6_stats); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/ipv6-fix-memory-leak-with-multiple-tables-during-netns-destruction.patch