public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
To: "Hefty, Sean" <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: Shachar Raindel <raindel-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Yotam Kenneth <yotamke-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: Re: [PATCH for-next] RDMA/CMA: Mark IPv4 addresses correctly when the listener is IPv6
Date: Tue, 16 Dec 2014 13:34:02 +0200	[thread overview]
Message-ID: <549018AA.8070107@mellanox.com> (raw)
In-Reply-To: <6c0a5a44a42a43ee96c05907dcdc0a51-LOZWmgKjnYgQouBfZGh8ttqRiQSDpxhJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>

On 11/16/2014 11:04 AM, Shachar Raindel wrote:
>
>> -----Original Message-----
>> From: linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org [mailto:linux-rdma-
>> owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org] On Behalf Of Hefty, Sean
>> Sent: Thursday, November 13, 2014 6:24 PM
>> To: Or Gerlitz
>> Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; Roland Dreier; Yotam Kenneth
>> Subject: RE: [PATCH for-next] RDMA/CMA: Mark IPv4 addresses correctly
>> when the listener is IPv6
>>
>>> From: Yotam Kenneth <yotamke-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>>>
>>> When accepting a new connection with the listener being IPv6, the
>>> family of the new connection is set as IPv6. This causes cma_zero_addr
>>> function to return true on an non-zero address. As a result, the wrong
>>> code path is taken. This causes the connection request to be rejected,
>>> as the RDMA-CM code looks for the wrong type of device.
>>>
>>> Since copying the ip address is done in different function depending
>>> on the family (cma_save_ip4_info/cma_save_ip6_info) this is fixed by
>>> hard coding the family of the IP address according to the function.
>>>
>>> Signed-off-by: Yotam Kenneth <yotamke-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>>> Signed-off-by: Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>>> ---
>>>   drivers/infiniband/core/cma.c |    8 ++++----
>>>   1 files changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/infiniband/core/cma.c
>> b/drivers/infiniband/core/cma.c
>>> index d570030..6e5e11c 100644
>>> --- a/drivers/infiniband/core/cma.c
>>> +++ b/drivers/infiniband/core/cma.c
>>> @@ -866,12 +866,12 @@ static void cma_save_ip4_info(struct rdma_cm_id
>> *id,
>>> struct rdma_cm_id *listen_i
>>>
>>>   	listen4 = (struct sockaddr_in *) &listen_id->route.addr.src_addr;
>>>   	ip4 = (struct sockaddr_in *) &id->route.addr.src_addr;
>>> -	ip4->sin_family = listen4->sin_family;
>>> +	ip4->sin_family = AF_INET;
>>>   	ip4->sin_addr.s_addr = hdr->dst_addr.ip4.addr;
>>>   	ip4->sin_port = listen4->sin_port;
>>>
>>>   	ip4 = (struct sockaddr_in *) &id->route.addr.dst_addr;
>>> -	ip4->sin_family = listen4->sin_family;
>>> +	ip4->sin_family = AF_INET;
>>>   	ip4->sin_addr.s_addr = hdr->src_addr.ip4.addr;
>>>   	ip4->sin_port = hdr->port;
>>>   }
>>> @@ -883,12 +883,12 @@ static void cma_save_ip6_info(struct rdma_cm_id
>> *id,
>>> struct rdma_cm_id *listen_i
>>>
>>>   	listen6 = (struct sockaddr_in6 *) &listen_id->route.addr.src_addr;
>>>   	ip6 = (struct sockaddr_in6 *) &id->route.addr.src_addr;
>>> -	ip6->sin6_family = listen6->sin6_family;
>>> +	ip6->sin6_family = AF_INET6;
>>>   	ip6->sin6_addr = hdr->dst_addr.ip6;
>>>   	ip6->sin6_port = listen6->sin6_port;
>>>
>>>   	ip6 = (struct sockaddr_in6 *) &id->route.addr.dst_addr;
>>> -	ip6->sin6_family = listen6->sin6_family;
>>> +	ip6->sin6_family = AF_INET6;
>>>   	ip6->sin6_addr = hdr->src_addr.ip6;
>>>   	ip6->sin6_port = hdr->port;
>> I can't say that I understand what the problem is or how the change
>> fixes it.  Is listen4->sin_port above not AF_INET?  If that's the case,
>> then aren't we still taking the wrong code path and just masking some
>> bug further up in the code path?
>
> An IPv6 listener socket can accept IPv4 connection, especially
> when listening to the "any" interface. This behavior is
> configurable with the net.ipv6.bindv6only sysctl flag. In
> RDMA-CM, we use this flag as the baseline value for the CM-ID
> flag "afonly". If afonly is set to 0, a listening RDMA-CM ID for
> IPv6 any address will happily accept an IPv4 connection. The IP
> addresses saved in cma_save_ip[46]_info are only used internally
> in the RDMA-CM code for selecting the appropriate device for
> answering and sending a reply. As such, there is no problem with
> hard coding the appropriate address family in the functions.
>
>

Hi Sean,

Any comment? can you please ack the patch or continue the discussion?


Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2014-12-16 11:34 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-13 15:52 [PATCH for-next] RDMA/CMA: Mark IPv4 addresses correctly when the listener is IPv6 Or Gerlitz
     [not found] ` <1415893935-4583-1-git-send-email-ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-11-13 16:24   ` Hefty, Sean
     [not found]     ` <1828884A29C6694DAF28B7E6B8A8237399E01B66-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-16  9:04       ` Shachar Raindel
     [not found]         ` <6c0a5a44a42a43ee96c05907dcdc0a51-LOZWmgKjnYgQouBfZGh8ttqRiQSDpxhJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2014-12-16 11:34           ` Or Gerlitz [this message]
     [not found]             ` <549018AA.8070107-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-12-16 18:38               ` Hefty, Sean
     [not found]                 ` <1828884A29C6694DAF28B7E6B8A8237399E2CCB3-8oqHQFITsIHTXloPLtfHfbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-12-17  4:22                   ` Or Gerlitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=549018AA.8070107@mellanox.com \
    --to=ogerlitz-vpraknaxozvwk0htik3j/w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=raindel-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=yotamke-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox