net: Fix sock_wfree() race
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 24 Sep 2009 10:49:24 +0000 (10:49 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Sep 2009 23:20:38 +0000 (16:20 -0700)
commitd99927f4d93f36553699573b279e0ff98ad7dea6
tree28481ae5aebac58c5fe29e0f08eddff4e80289f6
parentb7058842c940ad2c08dd829b21e5c92ebe3b8758
net: Fix sock_wfree() race

Commit 2b85a34e911bf483c27cfdd124aeb1605145dc80
(net: No more expensive sock_hold()/sock_put() on each tx)
opens a window in sock_wfree() where another cpu
might free the socket we are working on.

A fix is to call sk->sk_write_space(sk) while still
holding a reference on sk.

Reported-by: Jike Song <albcamus@gmail.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c