summaryrefslogtreecommitdiffstats
path: root/net/rds/bind.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rds/bind.c')
-rw-r--r--net/rds/bind.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/rds/bind.c b/net/rds/bind.c
index 20c156a73e73..5b5fb4ca8d3e 100644
--- a/net/rds/bind.c
+++ b/net/rds/bind.c
@@ -244,7 +244,8 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
244 */ 244 */
245 if (rs->rs_transport) { 245 if (rs->rs_transport) {
246 trans = rs->rs_transport; 246 trans = rs->rs_transport;
247 if (trans->laddr_check(sock_net(sock->sk), 247 if (!trans->laddr_check ||
248 trans->laddr_check(sock_net(sock->sk),
248 binding_addr, scope_id) != 0) { 249 binding_addr, scope_id) != 0) {
249 ret = -ENOPROTOOPT; 250 ret = -ENOPROTOOPT;
250 goto out; 251 goto out;
@@ -263,6 +264,8 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
263 264
264 sock_set_flag(sk, SOCK_RCU_FREE); 265 sock_set_flag(sk, SOCK_RCU_FREE);
265 ret = rds_add_bound(rs, binding_addr, &port, scope_id); 266 ret = rds_add_bound(rs, binding_addr, &port, scope_id);
267 if (ret)
268 rs->rs_transport = NULL;
266 269
267out: 270out:
268 release_sock(sk); 271 release_sock(sk);