Re: [PATCH v1 01/16] nfsd: fix IPv6 address handling in the DRC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Jan 28, 2013, at 3:26 PM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:

> On Mon, 28 Jan 2013 12:16:17 -0800 (PST)
> Chuck Lever <chuck.lever@xxxxxxxxxx> wrote:
> 
>> 
>> On Jan 28, 2013, at 3:05 PM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>> 
>>> On Mon, 28 Jan 2013 11:51:13 -0800 (PST)
>>> Chuck Lever <chuck.lever@xxxxxxxxxx> wrote:
>>> 
>>>> 
>>>> On Jan 28, 2013, at 2:41 PM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>>>> 
>>>>> Currently, it only stores the first 16 bytes of any address. struct
>>>>> sockaddr_in6 is 28 bytes however, so we're currently ignoring the last
>>>>> 12 bytes of the address.
>>>>> 
>>>>> Expand the c_addr field to a sockaddr_in6,
>>>> 
>>>> What do you do about link-local addresses?
>>>> 
>>> 
>>> I use rpc_cmp_addr() which should handle the scope correctly for
>>> link-local addrs.  Now that you mention it though, I think we may have a
>>> bug in __rpc_copy_addr6. It doesn't touch the scope_id at all --
>>> shouldn't we be setting the scopeid in that function as well?
>> 
>> It looks like rpc_copy_addr() is invoked to copy only source addresses, so the scope ID probably doesn't apply.  The comment over rpc_copy_addr() says it explicitly ignores port and scope ID.
>> 
> 
> Well, it copies the source address of the client, but all of the
> callers are in nfsd code. So I think it probably does matter:
> 
> Consider a server that has 2 interfaces, and 2 clients with identical
> link-local addresses hitting the link local address of each interface.
> The only way to distinguish them at that point is to look at their
> scope_ids.

Yes, but we want to use the server's scope IDs in this case, don't we?  Copying the client's scope IDs may not be the right thing to do.  That's why __rpc_copy_addr6() doesn't copy the scope ID.

> In the event that we're not using link-local addresses, the scopeid
> should just be ignored. So I think we probably need something like this
> patch too:
> 
> ----------------------[snip]---------------------
> 
> sunrpc: copy scope ID in __rpc_copy_addr6
> 
> When copying an address, we should also copy the scopeid in the event
> that this is a link-local address and the scope matters.
> 
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
> include/linux/sunrpc/clnt.h | 1 +
> 1 file changed, 1 insertion(+)
> 
> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
> index 34206b8..4824286 100644
> --- a/include/linux/sunrpc/clnt.h
> +++ b/include/linux/sunrpc/clnt.h
> @@ -242,6 +242,7 @@ static inline bool __rpc_copy_addr6(struct sockaddr *dst,
> 
> 	dsin6->sin6_family = ssin6->sin6_family;
> 	dsin6->sin6_addr = ssin6->sin6_addr;
> +	dsin6->sin6_scope_id = ssin6->sin6_scope_id;

If you find this is the correct thing to do, you should fix the documenting comment before rpc_copy_addr().


> 	return true;
> }
> #else	/* !(IS_ENABLED(CONFIG_IPV6) */
> -- 
> 1.7.11.7
> 
> 
> -- 
> Jeff Layton <jlayton@xxxxxxxxxx>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Chuck Lever
chuck[dot]lever[at]oracle[dot]com




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


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux