diff options
-rw-r--r-- | kernel/cgroup/cgroup.c | 11 | ||||
-rw-r--r-- | net/core/sock.c | 3 | ||||
-rw-r--r-- | net/ipv4/inet_connection_sock.c | 5 |
3 files changed, 6 insertions, 13 deletions
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 44857278eb8a..3380a3e49af5 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c | |||
@@ -5709,17 +5709,6 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd) | |||
5709 | if (cgroup_sk_alloc_disabled) | 5709 | if (cgroup_sk_alloc_disabled) |
5710 | return; | 5710 | return; |
5711 | 5711 | ||
5712 | /* Socket clone path */ | ||
5713 | if (skcd->val) { | ||
5714 | /* | ||
5715 | * We might be cloning a socket which is left in an empty | ||
5716 | * cgroup and the cgroup might have already been rmdir'd. | ||
5717 | * Don't use cgroup_get_live(). | ||
5718 | */ | ||
5719 | cgroup_get(sock_cgroup_ptr(skcd)); | ||
5720 | return; | ||
5721 | } | ||
5722 | |||
5723 | rcu_read_lock(); | 5712 | rcu_read_lock(); |
5724 | 5713 | ||
5725 | while (true) { | 5714 | while (true) { |
diff --git a/net/core/sock.c b/net/core/sock.c index 70c6ccbdf49f..4499e3153813 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -1680,6 +1680,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) | |||
1680 | 1680 | ||
1681 | /* sk->sk_memcg will be populated at accept() time */ | 1681 | /* sk->sk_memcg will be populated at accept() time */ |
1682 | newsk->sk_memcg = NULL; | 1682 | newsk->sk_memcg = NULL; |
1683 | memset(&newsk->sk_cgrp_data, 0, sizeof(newsk->sk_cgrp_data)); | ||
1683 | 1684 | ||
1684 | atomic_set(&newsk->sk_drops, 0); | 1685 | atomic_set(&newsk->sk_drops, 0); |
1685 | newsk->sk_send_head = NULL; | 1686 | newsk->sk_send_head = NULL; |
@@ -1718,8 +1719,6 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) | |||
1718 | newsk->sk_incoming_cpu = raw_smp_processor_id(); | 1719 | newsk->sk_incoming_cpu = raw_smp_processor_id(); |
1719 | atomic64_set(&newsk->sk_cookie, 0); | 1720 | atomic64_set(&newsk->sk_cookie, 0); |
1720 | 1721 | ||
1721 | cgroup_sk_alloc(&newsk->sk_cgrp_data); | ||
1722 | |||
1723 | /* | 1722 | /* |
1724 | * Before updating sk_refcnt, we must commit prior changes to memory | 1723 | * Before updating sk_refcnt, we must commit prior changes to memory |
1725 | * (Documentation/RCU/rculist_nulls.txt for details) | 1724 | * (Documentation/RCU/rculist_nulls.txt for details) |
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 67aec7a10686..d32c74507314 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
@@ -26,6 +26,8 @@ | |||
26 | #include <net/tcp.h> | 26 | #include <net/tcp.h> |
27 | #include <net/sock_reuseport.h> | 27 | #include <net/sock_reuseport.h> |
28 | #include <net/addrconf.h> | 28 | #include <net/addrconf.h> |
29 | #include <net/cls_cgroup.h> | ||
30 | #include <net/netprio_cgroup.h> | ||
29 | 31 | ||
30 | #ifdef INET_CSK_DEBUG | 32 | #ifdef INET_CSK_DEBUG |
31 | const char inet_csk_timer_bug_msg[] = "inet_csk BUG: unknown timer value\n"; | 33 | const char inet_csk_timer_bug_msg[] = "inet_csk BUG: unknown timer value\n"; |
@@ -476,6 +478,9 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) | |||
476 | spin_unlock_bh(&queue->fastopenq.lock); | 478 | spin_unlock_bh(&queue->fastopenq.lock); |
477 | } | 479 | } |
478 | mem_cgroup_sk_alloc(newsk); | 480 | mem_cgroup_sk_alloc(newsk); |
481 | cgroup_sk_alloc(&newsk->sk_cgrp_data); | ||
482 | sock_update_classid(&newsk->sk_cgrp_data); | ||
483 | sock_update_netprioidx(&newsk->sk_cgrp_data); | ||
479 | out: | 484 | out: |
480 | release_sock(sk); | 485 | release_sock(sk); |
481 | if (req) | 486 | if (req) |