Patch "cgroup: duplicate cgroup reference when cloning sockets" has been added to the 4.7-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
cgroup: duplicate cgroup reference when cloning sockets
to the 4.7-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:
cgroup-duplicate-cgroup-reference-when-cloning-sockets.patch
and it can be found in the queue-4.7 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
d979a39d7242e0601bf9b60e89628fb8ac577179Mon Sep 17 00:00:00 2001
From: Johannes Weiner <[email protected]>
Date: Mon, 19 Sep 2016 14:44:38 -0700
Subject: cgroup: duplicate cgroup reference when cloning sockets
From: Johannes Weiner <[email protected]>
commit d979a39d7242e0601bf9b60e89628fb8ac577179 upstream.
When a socket is cloned, the associated sock_cgroup_data is duplicated but not its reference on the cgroup. As a result, the cgroup reference count will underflow when both sockets are destroyed later on.
--- kernel/cgroup.c | 6 ++++++ net/core/sock.c | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-)
kernel/cgroup.c +6 -0
@@ -6240,6 +6240,12 @@ void cgroup_sk_alloc(struct sock_cgroup_if (cgroup_sk_alloc_disabled)return ; +/* Socket clone path */ +if (skcd->val) { +cgroup_get (sock_cgroup_ptr (skcd)); +return ; + } +rcu_read_lock ();while (true) {
net/core/sock.c +4 -1
@@ -1362,7 +1362,6 @@ static struct sock *sk_prot_alloc(structif (!try_module_get (prot->owner)) goto out_free_sec;sk_tx_queue_clear (sk); -cgroup_sk_alloc (&sk->sk_cgrp_data); }return sk;
@@ -1422,6 +1421,7 @@ struct sock *sk_alloc(struct net *net, isock_net_set (sk, net);atomic_set (&sk->sk_wmem_alloc,1 ); +cgroup_sk_alloc (&sk->sk_cgrp_data);sock_update_classid (&sk->sk_cgrp_data);sock_update_netprioidx (&sk->sk_cgrp_data); }
@@ -1566,6 +1566,9 @@ struct sock *sk_clone_lock(const struct newsk->sk_priority =0 ; newsk->sk_incoming_cpu =raw_smp_processor_id ();atomic64_set (&newsk->sk_cookie,0 ); + +cgroup_sk_alloc (&newsk->sk_cgrp_data); +/* * Before updating sk_refcnt, we must commit prior changes to memory * (Documentation/RCU/rculist_nulls.txt for details)
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/mm-memcontrol-make-per-cpu-charge-cache-irq-safe-for-socket-accounting.patch queue-4.7/cgroup-duplicate-cgroup-reference-when-cloning-sockets.patch