[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180910222422.19470-1-xiyou.wangcong@gmail.com>
Date: Mon, 10 Sep 2018 15:24:22 -0700
From: Cong Wang <xiyou.wangcong@...il.com>
To: netdev@...r.kernel.org
Cc: Cong Wang <xiyou.wangcong@...il.com>,
Sowmini Varadhan <sowmini.varadhan@...cle.com>,
Santosh Shilimkar <santosh.shilimkar@...cle.com>,
rds-devel@....oracle.com
Subject: [Patch net] rds: mark bound socket with SOCK_RCU_FREE
When a rds sock is bound, it is inserted into the bind_hash_table
which is protected by RCU. But when releasing rd sock, after it
is removed from this hash table, it is freed immediately without
respecting RCU grace period. This could cause some use-after-free
as reported by syzbot.
Mark the rds sock as SOCK_RCU_FREE before inserting it into the
bind_hash_table, so that it would be always freed after a RCU grace
period.
Reported-and-tested-by: syzbot+8967084bcac563795dc6@...kaller.appspotmail.com
Cc: Sowmini Varadhan <sowmini.varadhan@...cle.com>
Cc: Santosh Shilimkar <santosh.shilimkar@...cle.com>
Cc: rds-devel@....oracle.com
Signed-off-by: Cong Wang <xiyou.wangcong@...il.com>
---
net/rds/bind.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/rds/bind.c b/net/rds/bind.c
index 3ab55784b637..2281b34415b9 100644
--- a/net/rds/bind.c
+++ b/net/rds/bind.c
@@ -235,6 +235,7 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
goto out;
}
+ sock_set_flag(sk, SOCK_RCU_FREE);
ret = rds_add_bound(rs, binding_addr, &port, scope_id);
if (ret)
goto out;
--
2.14.4
Powered by blists - more mailing lists