diff options
author | Hannes Frederic Sowa <hannes@stressinduktion.org> | 2015-11-17 15:10:59 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-12-14 21:25:34 -0800 |
commit | acb70b259ad3968e73a3da734dfa64024857c85f (patch) | |
tree | c44c73d60e281a143a77263544bc1275f31ca739 /net | |
parent | 183e815485047e8efbc691884f2ac21c167af7f9 (diff) |
af_unix: take receive queue lock while appending new skb
[ Upstream commit a3a116e04cc6a94d595ead4e956ab1bc1d2f4746 ]
While possibly in future we don't necessarily need to use
sk_buff_head.lock this is a rather larger change, as it affects the
af_unix fd garbage collector, diag and socket cleanups. This is too much
for a stable patch.
For the time being grab sk_buff_head.lock without disabling bh and irqs,
so don't use locked skb_queue_tail.
Fixes: 869e7c62486e ("net: af_unix: implement stream sendpage support")
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Reported-by: Eric Dumazet <edumazet@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/unix/af_unix.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 3e2ca39f3b68..42ab2cc1f05d 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -1812,8 +1812,11 @@ alloc_skb: skb->truesize += size; atomic_add(size, &sk->sk_wmem_alloc); - if (newskb) + if (newskb) { + spin_lock(&other->sk_receive_queue.lock); __skb_queue_tail(&other->sk_receive_queue, newskb); + spin_unlock(&other->sk_receive_queue.lock); + } unix_state_unlock(other); mutex_unlock(&unix_sk(other)->readlock); |