From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932085AbbJLC3a (ORCPT ); Sun, 11 Oct 2015 22:29:30 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:20610 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752894AbbJLC32 (ORCPT ); Sun, 11 Oct 2015 22:29:28 -0400 Subject: Re: [PATCH net-next] RDS: Invoke ->laddr_check() in rds_bind() for explicitly bound transports. To: Sowmini Varadhan , netdev@vger.kernel.org, linux-kernel@vger.kernel.org References: <20151011204603.GA14646@oracle.com> Cc: davem@davemloft.net, rds-devel@oss.oracle.com, ajaykumar.hotchandani@oracle.com, igor.maximov@oracle.com From: "santosh.shilimkar@oracle.com" Organization: Oracle Corporation Message-ID: <561B1B03.5060206@oracle.com> Date: Sun, 11 Oct 2015 19:29:23 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <20151011204603.GA14646@oracle.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/11/15 1:46 PM, Sowmini Varadhan wrote: > > The IP address passed to rds_bind() should be vetted by the > transport's ->laddr_check() for a previously bound transport. > This needs to be done to avoid cases where, for example, > the application has asked for an IB transport, > but the IP address passed to bind is only usable on > ethernet interfaces. > Right. Probably it should go into stable as well. > Signed-off-by: Sowmini Varadhan > --- > net/rds/bind.c | 9 ++++++++- > 1 files changed, 8 insertions(+), 1 deletions(-) > > diff --git a/net/rds/bind.c b/net/rds/bind.c > index bc6b93e..6192566 100644 > --- a/net/rds/bind.c > +++ b/net/rds/bind.c > @@ -196,7 +196,14 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) > goto out; > > if (rs->rs_transport) { /* previously bound */ > - ret = 0; Minor comment. If you retain above line you can drop the below else. > + trans = rs->rs_transport; > + if (trans->laddr_check(sock_net(sock->sk), > + sin->sin_addr.s_addr) != 0) { > + ret = -ENOPROTOOPT; > + rds_remove_bound(rs); > + } else { > + ret = 0; > + } Acked-by: Santosh Shilimkar