From mboxrd@z Thu Jan 1 00:00:00 1970 From: Santosh Shilimkar Subject: Re: [PATCH net-next] rds: avoid lock hierarchy violation between m_rs_lock and rs_recv_lock Date: Wed, 8 Aug 2018 14:51:52 -0700 Message-ID: <392e9286-e98c-1dbe-d598-9afca1818cf6@oracle.com> References: <1533761833-106379-1-git-send-email-sowmini.varadhan@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: davem@davemloft.net, rds-devel@oss.oracle.com To: Sowmini Varadhan , netdev@vger.kernel.org Return-path: Received: from userp2130.oracle.com ([156.151.31.86]:45256 "EHLO userp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727337AbeHIANj (ORCPT ); Wed, 8 Aug 2018 20:13:39 -0400 In-Reply-To: <1533761833-106379-1-git-send-email-sowmini.varadhan@oracle.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 8/8/2018 1:57 PM, Sowmini Varadhan wrote: > The following deadlock, reported by syzbot, can occur if CPU0 is in > rds_send_remove_from_sock() while CPU1 is in rds_clear_recv_queue() > > CPU0 CPU1 > ---- ---- > lock(&(&rm->m_rs_lock)->rlock); > lock(&rs->rs_recv_lock); > lock(&(&rm->m_rs_lock)->rlock); > lock(&rs->rs_recv_lock); > > The deadlock should be avoided by moving the messages from the > rs_recv_queue into a tmp_list in rds_clear_recv_queue() under > the rs_recv_lock, and then dropping the refcnt on the messages > in the tmp_list (potentially resulting in rds_message_purge()) > after dropping the rs_recv_lock. > > The same lock hierarchy violation also exists in rds_still_queued() > and should be avoided in a similar manner > > Signed-off-by: Sowmini Varadhan > Reported-by: syzbot+52140d69ac6dc6b927a9@syzkaller.appspotmail.com > --- This bug doesn't make sense since two different transports are using same socket (Loop and rds_tcp) and running together. For same transport, such race can't happen with MSG_ON_SOCK flag. CPU1-> rds_loop_inc_free CPU0 -> rds_tcp_cork ... I need to understand this test better. Regards, Santosh