rds: MP-RDS may use an invalid c_path
authorKa-Cheong Poon <ka-cheong.poon@oracle.com>
Wed, 11 Apr 2018 07:57:25 +0000 (00:57 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 Apr 2018 14:24:01 +0000 (10:24 -0400)
commita43cced9a348901f9015f4730b70b69e7c41a9c9
treeec0daa4fc626f408f90f69d17705e24abb39c016
parent1cc5954f44150bb70cac07c3cc5df7cf0dfb61ec
rds: MP-RDS may use an invalid c_path

rds_sendmsg() calls rds_send_mprds_hash() to find a c_path to use to
send a message.  Suppose the RDS connection is not yet up.  In
rds_send_mprds_hash(), it does

if (conn->c_npaths == 0)
wait_event_interruptible(conn->c_hs_waitq,
 (conn->c_npaths != 0));

If it is interrupted before the connection is set up,
rds_send_mprds_hash() will return a non-zero hash value.  Hence
rds_sendmsg() will use a non-zero c_path to send the message.  But if
the RDS connection ends up to be non-MP capable, the message will be
lost as only the zero c_path can be used.

Signed-off-by: Ka-Cheong Poon <ka-cheong.poon@oracle.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/send.c