tcp: two more missing bh disable
authorEric Dumazet <edumazet@google.com>
Wed, 4 May 2016 22:27:29 +0000 (15:27 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 May 2016 03:47:54 +0000 (23:47 -0400)
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>
net/ipv4/inet_connection_sock.c
net/ipv4/tcp_ipv4.c

index 7ce112a..fa8c398 100644 (file)
@@ -706,7 +706,9 @@ void inet_csk_destroy_sock(struct sock *sk)
 
        sk_refcnt_debug_release(sk);
 
+       local_bh_disable();
        percpu_counter_dec(sk->sk_prot->orphan_count);
+       local_bh_enable();
        sock_put(sk);
 }
 EXPORT_SYMBOL(inet_csk_destroy_sock);
index 761bc49..a7ab947 100644 (file)
@@ -1839,7 +1839,9 @@ void tcp_v4_destroy_sock(struct sock *sk)
        tcp_free_fastopen_req(tp);
        tcp_saved_syn_free(tp);
 
+       local_bh_disable();
        sk_sockets_allocated_dec(sk);
+       local_bh_enable();
 
        if (mem_cgroup_sockets_enabled && sk->sk_memcg)
                sock_release_memcg(sk);