net/rds: An rds_sock is added too early to the hash table
authorKa-Cheong Poon <ka-cheong.poon@oracle.com>
Wed, 11 Sep 2019 09:58:05 +0000 (02:58 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 Oct 2019 06:26:13 +0000 (08:26 +0200)
commit3de749d6d7cee11bbbe00090f4a285b759a406ab
tree01c800866aa7b25d2cb9e9807657ed2e528785c9
parent07f7ec87b5f6e1c9d954e967e971efa696ecb018
net/rds: An rds_sock is added too early to the hash table

[ Upstream commit c5c1a030a7dbf8dd4e1fa4405ae9a89dc1d2a8db ]

In rds_bind(), an rds_sock is added to the RDS bind hash table before
rs_transport is set.  This means that the socket can be found by the
receive code path when rs_transport is NULL.  And the receive code
path de-references rs_transport for congestion update check.  This can
cause a panic.  An rds_sock should not be added to the bind hash table
before all the needed fields are set.

Reported-by: syzbot+4b4f8163c2e246df3c4c@syzkaller.appspotmail.com
Signed-off-by: Ka-Cheong Poon <ka-cheong.poon@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/rds/bind.c