Message ID | 4E5CABE9.5090401@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, 30 Aug 2011 17:22:49 +0800 Mi Jinlong <mijinlong@cn.fujitsu.com> wrote: > For ipv6 link-local addresses, sunrpc do not compare those scope id. > This patch let sunrpc compares scope id only on link-local addresses. > > Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com> Reviewed-by: > --- > include/linux/sunrpc/clnt.h | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h > index db7bcaf..ee1bb67 100644 > --- a/include/linux/sunrpc/clnt.h > +++ b/include/linux/sunrpc/clnt.h > @@ -218,7 +218,13 @@ static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, > { > const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; > const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; > - return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); > + > + if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr)) > + return false; > + else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL) > + return sin1->sin6_scope_id == sin2->sin6_scope_id; > + > + return true; > } > > static inline bool __rpc_copy_addr6(struct sockaddr *dst, Reviewed-by: Jeff Layton <jlayton@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Aug 30, 2011, at 5:22 AM, Mi Jinlong wrote: > For ipv6 link-local addresses, sunrpc do not compare those scope id. > This patch let sunrpc compares scope id only on link-local addresses. > > Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com> > --- > include/linux/sunrpc/clnt.h | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h > index db7bcaf..ee1bb67 100644 > --- a/include/linux/sunrpc/clnt.h > +++ b/include/linux/sunrpc/clnt.h > @@ -218,7 +218,13 @@ static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, > { > const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; > const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; > - return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); > + > + if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr)) > + return false; > + else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL) > + return sin1->sin6_scope_id == sin2->sin6_scope_id; Thanks for splitting the patches. The address comparators I've seen check that both addresses are link-local before comparing the scope IDs. I don't think we can assume the kind of source-destination address relationship we have in parts of the RPC server code. > + > + return true; > } > > static inline bool __rpc_copy_addr6(struct sockaddr *dst, > -- > 1.7.6 > >
On Aug 30, 2011, at 10:28 AM, Chuck Lever wrote: > > On Aug 30, 2011, at 5:22 AM, Mi Jinlong wrote: > >> For ipv6 link-local addresses, sunrpc do not compare those scope id. >> This patch let sunrpc compares scope id only on link-local addresses. >> >> Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com> >> --- >> include/linux/sunrpc/clnt.h | 8 +++++++- >> 1 files changed, 7 insertions(+), 1 deletions(-) >> >> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h >> index db7bcaf..ee1bb67 100644 >> --- a/include/linux/sunrpc/clnt.h >> +++ b/include/linux/sunrpc/clnt.h >> @@ -218,7 +218,13 @@ static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, >> { >> const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; >> const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; >> - return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); >> + >> + if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr)) >> + return false; >> + else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL) >> + return sin1->sin6_scope_id == sin2->sin6_scope_id; > > Thanks for splitting the patches. > > The address comparators I've seen check that both addresses are link-local before comparing the scope IDs. I don't think we can assume the kind of source-destination address relationship we have in parts of the RPC server code. Jeff points out that you've already tested that the addresses are equal. So, never mind. Reviewed-by: Chuck Lever <chuck.lever@oracle.com> > >> + >> + return true; >> } >> >> static inline bool __rpc_copy_addr6(struct sockaddr *dst, >> -- >> 1.7.6 >> >> > > -- > 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@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index db7bcaf..ee1bb67 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -218,7 +218,13 @@ static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, { const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; - return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); + + if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr)) + return false; + else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL) + return sin1->sin6_scope_id == sin2->sin6_scope_id; + + return true; } static inline bool __rpc_copy_addr6(struct sockaddr *dst,
For ipv6 link-local addresses, sunrpc do not compare those scope id. This patch let sunrpc compares scope id only on link-local addresses. Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com> --- include/linux/sunrpc/clnt.h | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)