[NETLINK]: Fix race with recvmsg().
authorTommy S. Christensen <tommy.christensen@tpack.net>
Thu, 19 May 2005 19:46:59 +0000 (12:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 19 May 2005 19:46:59 +0000 (12:46 -0700)
commitdb61ecc3352d72513c1b07805bd6f760e30c001b
treec85af775fc7eccbb12501e0a8d42cd5d284e494d
parent1eda339e76a9aac05883c548028bf91aed734783
[NETLINK]: Fix race with recvmsg().

This bug causes:

assertion (!atomic_read(&sk->sk_rmem_alloc)) failed at net/netlink/af_netlink.c (122)

What's happening is that:

1) The skb is sent to socket 1.
2) Someone does a recvmsg on socket 1 and drops the ref on the skb.
   Note that the rmalloc is not returned at this point since the
   skb is still referenced.
3) The same skb is now sent to socket 2.

This version of the fix resurrects the skb_orphan call that was moved
out, last time we had 'shared-skb troubles'. It is practically a no-op
in the common case, but still prevents the possible race with recvmsg.

Signed-off-by: Tommy S. Christensen <tommy.christensen@tpack.net>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/af_netlink.c