Skip to contentSkip to conversation

Patch "net: check dead netns for peernet2id_alloc()" has been added to the 4.8-stable tree

PATCH [email protected] 1 participant 1 message Dec 8, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

net: check dead netns for peernet2id_alloc()

to the 4.8-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:
net-check-dead-netns-for-peernet2id_alloc.patch
and it can be found in the queue-4.8 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 Dec 8 07:19:12 CET 2016

From: WANG Cong <[email protected]>
Date: Wed, 16 Nov 2016 10:27:02 -0800
Subject: net: check dead netns for peernet2id_alloc()

From: WANG Cong <[email protected]>

[ Upstream commit cfc44a4d147ea605d66ccb917cc24467d15ff867 ]

Andrei reports we still allocate netns ID from idr after we destroy it in cleanup_net().

cleanup_net():
...
idr_destroy(&net->netns_ids);
...
list_for_each_entry_reverse(ops, &pernet_list, list)

    ops_exit_list(ops, &net_exit_list);
      -> rollback_registered_many()
        -> rtmsg_ifinfo_build_skb()
         -> rtnl_fill_ifinfo()
           -> peernet2id_alloc()

After that point we should not even access net->netns_ids, we should check the death of the current netns as early as we can in peernet2id_alloc().

For net-next we can consider to avoid sending rtmsg totally, it is a good optimization for netns teardown path.

Fixes 0c7aecd4bde4 ("netns: add rtnl cmd to add and get peer netns ids")
Cc Nicolas Dichtel <[email protected]>
---
 net/core/net_namespace.c |    2 ++
 1 file changed, 2 insertions(+)
net/core/net_namespace.c +2 -0
@@ -217,6 +217,8 @@ int peernet2id_alloc(struct net *net, st
 	bool alloc;
 	int id;
 
+	if (atomic_read(&net->count) == 0)
+		return NETNSA_NSID_NOT_ASSIGNED;
 	spin_lock_irqsave(&net->nsid_lock, flags);
 	alloc = atomic_read(&peer->count) == 0 ? false : true;
 	id = __peernet2id_alloc(net, peer, &alloc);

Patches currently in stable-queue which might be from [email protected] are

queue-4.8/gro_cells-mark-napi-struct-as-not-busy-poll-candidates.patch queue-4.8/net-sched-respect-rcu-grace-period-on-cls-destruction.patch queue-4.8/af_unix-conditionally-use-freezable-blocking-calls-in-read.patch queue-4.8/netlink-call-cb-done-from-a-worker-thread.patch queue-4.8/net-check-dead-netns-for-peernet2id_alloc.patch