Skip to content

Commit 7a2b4ee

Browse files
congwanggregkh
authored andcommitted
ppp: defer netns reference release for ppp channel
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") Reported-by: Matt Bennett <Matt.Bennett@alliedtelesis.co.nz> Cc: Paul Mackerras <paulus@samba.org> Cc: linux-ppp@vger.kernel.org Cc: Guillaume Nault <g.nault@alphalink.fr> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net> Cc: bmajal222 <bmajal222@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 37de955 commit 7a2b4ee

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

drivers/net/ppp/ppp_generic.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2390,8 +2390,6 @@ ppp_unregister_channel(struct ppp_channel *chan)
23902390
spin_lock_bh(&pn->all_channels_lock);
23912391
list_del(&pch->list);
23922392
spin_unlock_bh(&pn->all_channels_lock);
2393-
put_net(pch->chan_net);
2394-
pch->chan_net = NULL;
23952393

23962394
pch->file.dead = 1;
23972395
wake_up_interruptible(&pch->file.rwait);
@@ -2984,6 +2982,9 @@ ppp_disconnect_channel(struct channel *pch)
29842982
*/
29852983
static void ppp_destroy_channel(struct channel *pch)
29862984
{
2985+
put_net(pch->chan_net);
2986+
pch->chan_net = NULL;
2987+
29872988
atomic_dec(&channel_count);
29882989

29892990
if (!pch->file.dead) {

0 commit comments

Comments
 (0)