Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 920de804 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: Make sure BHs are disabled in sock_prot_inuse_add()



The rule of calling sock_prot_inuse_add() is that BHs must
be disabled.  Some new calls were added where this was not
true and this tiggers warnings as reported by Ilpo.

Fix this by adding explicit BH disabling around those call sites,
or moving sock_prot_inuse_add() call inside an existing BH disabled
section.

Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1f87e235
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -402,9 +402,9 @@ void inet_unhash(struct sock *sk)

	spin_lock_bh(lock);
	done =__sk_nulls_del_node_init_rcu(sk);
	spin_unlock_bh(lock);
	if (done)
		sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
	spin_unlock_bh(lock);
}
EXPORT_SYMBOL_GPL(inet_unhash);

+2 −2
Original line number Diff line number Diff line
@@ -872,6 +872,7 @@ static int packet_release(struct socket *sock)

	write_lock_bh(&net->packet.sklist_lock);
	sk_del_node_init(sk);
	sock_prot_inuse_add(net, sk->sk_prot, -1);
	write_unlock_bh(&net->packet.sklist_lock);

	/*
@@ -910,7 +911,6 @@ static int packet_release(struct socket *sock)
	skb_queue_purge(&sk->sk_receive_queue);
	sk_refcnt_debug_release(sk);

	sock_prot_inuse_add(net, sk->sk_prot, -1);
	sock_put(sk);
	return 0;
}
@@ -1085,8 +1085,8 @@ static int packet_create(struct net *net, struct socket *sock, int protocol)

	write_lock_bh(&net->packet.sklist_lock);
	sk_add_node(sk, &net->packet.sklist);
	write_unlock_bh(&net->packet.sklist_lock);
	sock_prot_inuse_add(net, &packet_proto, 1);
	write_unlock_bh(&net->packet.sklist_lock);
	return(0);
out:
	return err;
+4 −2
Original line number Diff line number Diff line
@@ -615,9 +615,11 @@ static struct sock *unix_create1(struct net *net, struct socket *sock)
out:
	if (sk == NULL)
		atomic_dec(&unix_nr_socks);
	else
	else {
		local_bh_disable();
		sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);

		local_bh_enable();
	}
	return sk;
}