Skip to contentSkip to conversation

Patch "ppp: defer netns reference release for ppp channel" has been added to the 4.4-stable tree

PATCH [email protected] 1 participant 1 message Jan 5, 2017

Subsystems (3)
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

ppp: defer netns reference release for ppp channel

to the 4.4-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:
ppp-defer-netns-reference-release-for-ppp-channel.patch
and it can be found in the queue-4.4 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 205e1e255c479f3fd77446415706463b282f94e4 Mon Sep 17 00:00:00 2001

From: WANG Cong <[email protected]>
Date: Tue, 5 Jul 2016 22:12:36 -0700
Subject: ppp: defer netns reference release for ppp channel

From: WANG Cong <[email protected]>

commit 205e1e255c479f3fd77446415706463b282f94e4 upstream.

Matt reported that we have a NULL pointer dereference in ppp_pernet() from ppp_connect_channel(), i.e. pch->chan_net is NULL.

This is due to that a parallel ppp_unregister_channel() could happen while we are in ppp_connect_channel(), during which pch->chan_net set to NULL. Since we need a reference to net per channel, it makes sense to sync the refcnt with the life time of the channel, therefore we should release this reference when we destroy it.

Fixes 1f461dcdd296 ("ppp: take reference on channels netns")
Cc Paul Mackerras <[email protected]>
Cc Guillaume Nault <[email protected]>
Cc Cyrill Gorcunov <[email protected]>
Cc bmajal222 <[email protected]>
---
 drivers/net/ppp/ppp_generic.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/net/ppp/ppp_generic.c +3 -2
@@ -2390,8 +2390,6 @@ ppp_unregister_channel(struct ppp_channe
 	spin_lock_bh(&pn->all_channels_lock);
 	list_del(&pch->list);
 	spin_unlock_bh(&pn->all_channels_lock);
-	put_net(pch->chan_net);
-	pch->chan_net = NULL;
 
 	pch->file.dead = 1;
 	wake_up_interruptible(&pch->file.rwait);
@@ -2984,6 +2982,9 @@ ppp_disconnect_channel(struct channel *p
  */
 static void ppp_destroy_channel(struct channel *pch)
 {
+	put_net(pch->chan_net);
+	pch->chan_net = NULL;
+
 	atomic_dec(&channel_count);
 
 	if (!pch->file.dead) {

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

queue-4.4/ppp-defer-netns-reference-release-for-ppp-channel.patch