Re: [PATCH] NLM: AF_UNSPEC addresses are all equal

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

 



On Sat, Nov 22, 2008 at 09:08:30PM -0500, Chuck Lever wrote:
> Hi Bruce-
>
> On Nov 22, 2008, at Nov 22, 2008, 11:58 AM, Chuck Lever wrote:
>> The nlm_cmp_addr() function, which compares two IP addresses, is
>> sometimes used to check AF_UNSPEC addresses.  If both addresses are
>> AF_UNSPEC, then it should consider them equal -- the contents of an
>> AF_UNSPEC address, other than the address family, are
>> inconsequential.
>>
>> This is important because the loop in nlm_lookup_host() always
>> compares the h_srcaddr field to the incoming source address.  For
>> client nlm_host entries, both are always AF_UNSPEC, and should allow
>> the entry match to succeed.  If it always fails, then we create a
>> fresh nlm_host entry every time we mount the same server, even if
>> all other items in the existing entry (protocol, NLM version, host
>> address) match.
>>
>> These extra entries will eventually expire once the server is
>> unmounted, so the impact of this bug, introduced in 2.6.28 with
>> commit 781b61a6, should be minor.
>>
>> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
>> ---
>> Bruce-
>>
>> Another minor lockd IPv6 bug fix for 2.6.28.
>>
>> Alternate fix for this problem is to change nlm_lookup_host() so that
>> it compares the srcaddrs only when h_server is set.
>
> I now have a patch that does this instead, and it seems to make more  
> sense to me.

OK.  (I don't think you've sent it yet?)

--b.

>
>>  include/linux/lockd/lockd.h |    2 ++
>> 1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h
>> index b56d5aa..e8aa108 100644
>> --- a/include/linux/lockd/lockd.h
>> +++ b/include/linux/lockd/lockd.h
>> @@ -344,6 +344,8 @@ static inline int nlm_cmp_addr(const struct  
>> sockaddr *sap1,
>> {
>> 	if (sap1->sa_family == sap2->sa_family) {
>> 		switch (sap1->sa_family) {
>> +		case AF_UNSPEC:
>> +			return 1;
>> 		case AF_INET:
>> 			return __nlm_cmp_addr4(sap1, sap2);
>> 		case AF_INET6:
>>
>
> -- 
> 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