]> git.baikalelectronics.ru Git - kernel.git/commit
netlink: Fix autobind race condition that leads to zero port ID
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 18 Sep 2015 11:16:50 +0000 (19:16 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 21 Sep 2015 05:55:31 +0000 (22:55 -0700)
commit3a99bcadf7e18276ecea51565b40b1667b6b808b
treeeeb43c3ce6917390ce6e55b48990d2ba32aaf9cc
parent4f5032d7cb64e718e2b9c8c97f61ab2a49c297fa
netlink: Fix autobind race condition that leads to zero port ID

The commit 8e6e139f83d4a308b006c3f28843a9ad503a1db0 ("netlink:
Reset portid after netlink_insert failure") introduced a race
condition where if two threads try to autobind the same socket
one of them may end up with a zero port ID.  This led to kernel
deadlocks that were observed by multiple people.

This patch reverts that commit and instead fixes it by introducing
a separte rhash_portid variable so that the real portid is only set
after the socket has been successfully hashed.

Fixes: 8e6e139f83d4 ("netlink: Reset portid after netlink_insert failure")
Reported-by: Tejun Heo <tj@kernel.org>
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/af_netlink.c
net/netlink/af_netlink.h