net: memcontrol: defer call to mem_cgroup_sk_alloc()
authorEric Dumazet <edumazet@google.com>
Mon, 9 Oct 2017 04:44:51 +0000 (21:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 10 Oct 2017 03:55:01 +0000 (20:55 -0700)
commit9f1c2674b328a69ab5a9b5a1c52405795ee4163f
treebef7fc6c61201ca2b6d913bab2686a38fda039d2
parent529a86e063e9ff625c4ff247d8aa17d8072444fb
net: memcontrol: defer call to mem_cgroup_sk_alloc()

Instead of calling mem_cgroup_sk_alloc() from BH context,
it is better to call it from inet_csk_accept() in process context.

Not only this removes code in mem_cgroup_sk_alloc(), but it also
fixes a bug since listener might have been dismantled and css_get()
might cause a use-after-free.

Fixes: e994b2f0fb92 ("tcp: do not lock listener to process SYN packets")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
mm/memcontrol.c
net/core/sock.c
net/ipv4/inet_connection_sock.c