diff options
author | Eric Dumazet <edumazet@google.com> | 2016-05-04 18:27:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-05-04 23:47:54 -0400 |
commit | 777c6ae57ebd432b59950b3e28bf01676018d1b2 (patch) | |
tree | daa9fc5647e16767136233e80544b785727f1271 | |
parent | aa8a8b05adfc72e562abe7ae5c6933906e0ed2e9 (diff) |
tcp: two more missing bh disable
percpu_counter only have protection against preemption.
TCP stack uses them possibly from BH, so we need BH protection
in contexts that could be run in process context
Fixes: c10d9310edf5 ("tcp: do not assume TCP code is non preemptible")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/ipv4/inet_connection_sock.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 7ce112aa3a7b..fa8c39804bdb 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
@@ -706,7 +706,9 @@ void inet_csk_destroy_sock(struct sock *sk) | |||
706 | 706 | ||
707 | sk_refcnt_debug_release(sk); | 707 | sk_refcnt_debug_release(sk); |
708 | 708 | ||
709 | local_bh_disable(); | ||
709 | percpu_counter_dec(sk->sk_prot->orphan_count); | 710 | percpu_counter_dec(sk->sk_prot->orphan_count); |
711 | local_bh_enable(); | ||
710 | sock_put(sk); | 712 | sock_put(sk); |
711 | } | 713 | } |
712 | EXPORT_SYMBOL(inet_csk_destroy_sock); | 714 | EXPORT_SYMBOL(inet_csk_destroy_sock); |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 761bc492c5e3..a7ab9472d645 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -1839,7 +1839,9 @@ void tcp_v4_destroy_sock(struct sock *sk) | |||
1839 | tcp_free_fastopen_req(tp); | 1839 | tcp_free_fastopen_req(tp); |
1840 | tcp_saved_syn_free(tp); | 1840 | tcp_saved_syn_free(tp); |
1841 | 1841 | ||
1842 | local_bh_disable(); | ||
1842 | sk_sockets_allocated_dec(sk); | 1843 | sk_sockets_allocated_dec(sk); |
1844 | local_bh_enable(); | ||
1843 | 1845 | ||
1844 | if (mem_cgroup_sockets_enabled && sk->sk_memcg) | 1846 | if (mem_cgroup_sockets_enabled && sk->sk_memcg) |
1845 | sock_release_memcg(sk); | 1847 | sock_release_memcg(sk); |