From: David Miller <davem@davemloft.net>
To: dada1@cosmosbay.com
Cc: ilpo.jarvinen@helsinki.fi, netdev@vger.kernel.org
Subject: Re: net-next/unix: BUG: using smp_processor_id() in preemptible
Date: Sun, 23 Nov 2008 17:34:26 -0800 (PST) [thread overview]
Message-ID: <20081123.173426.255648175.davem@davemloft.net> (raw)
In-Reply-To: <20081123.172014.78676422.davem@davemloft.net>
From: David Miller <davem@davemloft.net>
Date: Sun, 23 Nov 2008 17:20:14 -0800 (PST)
> From: Eric Dumazet <dada1@cosmosbay.com>
> Date: Sun, 23 Nov 2008 04:32:30 +0100
>
> > [PATCH] net: make sock_prot_inuse_add() preempt safe
...
> Eric, you added this bug by starting to use this interface in
> situations where BH's were not disabled.
>
> Ever existing use adhered to that rule.
>
> If you therefore want to call this interface in new locations,
> you have to make sure those locations follow the rule too.
Here is what I commited to fix this bug.
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.
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/netlink/af_netlink.c | 3 +++
net/sctp/socket.c | 4 ++++
net/unix/af_unix.c | 2 ++
3 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index a2071dc..c7d7657 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -452,7 +452,10 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol)
if (err < 0)
goto out_module;
+ local_bh_disable();
sock_prot_inuse_add(net, &netlink_proto, 1);
+ local_bh_enable();
+
nlk = nlk_sk(sock->sk);
nlk->module = module;
out:
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 0c70eff..f03af84 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -3614,7 +3614,11 @@ SCTP_STATIC int sctp_init_sock(struct sock *sk)
SCTP_DBG_OBJCNT_INC(sock);
atomic_inc(&sctp_sockets_allocated);
+
+ local_bh_disable();
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
+ local_bh_enable();
+
return 0;
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index e1ca8f7..a45a9f7 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -361,7 +361,9 @@ static void unix_sock_destructor(struct sock *sk)
unix_release_addr(u->addr);
atomic_dec(&unix_nr_socks);
+ local_bh_disable();
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
+ local_bh_enable();
#ifdef UNIX_REFCNT_DEBUG
printk(KERN_DEBUG "UNIX %p is destroyed, %d are still alive.\n", sk,
atomic_read(&unix_nr_socks));
--
1.5.6.5
next prev parent reply other threads:[~2008-11-24 1:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-22 21:04 net-next/unix: BUG: using smp_processor_id() in preemptible Ilpo Järvinen
2008-11-23 3:32 ` Eric Dumazet
2008-11-23 21:40 ` Ilpo Järvinen
2008-11-24 1:20 ` David Miller
2008-11-24 1:34 ` David Miller [this message]
2008-11-24 5:51 ` Eric Dumazet
2008-11-24 8:01 ` Eric Dumazet
2008-11-24 8:09 ` David Miller
2008-11-24 8:41 ` Ilpo Järvinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081123.173426.255648175.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=dada1@cosmosbay.com \
--cc=ilpo.jarvinen@helsinki.fi \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).