From: Michal Hocko Date: Tue, 8 Sep 2015 22:01:13 +0000 (-0700) Subject: memcg, tcp_kmem: check for cg_proto in sock_update_memcg X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=a03f1f058969ec350fb7451a6fbca23096ee5727;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git memcg, tcp_kmem: check for cg_proto in sock_update_memcg sk_prot->proto_cgroup is allowed to return NULL but sock_update_memcg doesn't check for NULL. The function relies on the mem_cgroup_is_root check because we shouldn't get NULL otherwise because mem_cgroup_from_task will always return !NULL. All other callers are checking for NULL and we can safely replace mem_cgroup_is_root() check by cg_proto != NULL which will be more straightforward (proto_cgroup returns NULL for the root memcg already). Signed-off-by: Michal Hocko Reviewed-by: Vladimir Davydov Cc: Johannes Weiner Cc: Tejun Heo Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 191d8aa5da71..3033e6c42229 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -315,8 +315,7 @@ void sock_update_memcg(struct sock *sk) rcu_read_lock(); memcg = mem_cgroup_from_task(current); cg_proto = sk->sk_prot->proto_cgroup(memcg); - if (!mem_cgroup_is_root(memcg) && - memcg_proto_active(cg_proto) && + if (cg_proto && memcg_proto_active(cg_proto) && css_tryget_online(&memcg->css)) { sk->sk_cgrp = cg_proto; }