All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kelly Anderson <kelly-lACMDn57031vQQPgy9v2K1aTQe2KTcn/@public.gmane.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: [NFS] Nfs4 over Ipv6 patch to fix ipv6 subnetting in /etc/exports
Date: Wed, 02 Dec 2009 17:16:04 -0700	[thread overview]
Message-ID: <4B170344.9070205@silka.with-linux.com> (raw)
In-Reply-To: <5A28692A-9683-4B49-A016-6639BD80E1BC@oracle.com>

On 12/02/2009 04:32 PM, Chuck Lever wrote:
> [Cc: correct mailing list]
>
> IPv6 support in mountd is entirely experimental (ie not guaranteed to 
> work), and exists only my personal git repo, not in the official 
> nfs-utils git repo.  However, it looks like you are working against my 
> code.

I got it from the following.
git://git.linux-nfs.org/projects/cel/nfs-utils.git

>
>
> Also, we prefer patches submitted inline, not as attachments, as that 
> makes it easy to hit "reply" and comment on the content of the patch.  
> A patch description and a Signed-off-by: line is required.  Take a 
> look in the archives of this mailing list for examples.
>
> Basically your patch misapplies the address mask in check_subnet_v6, 
> so I don't think it's the right fix.  Instead of "sin6 & mask" you 
> have "sin6 & sin6" which basically means the mask is ignored, and the 
> check will always succeed.
>
> Maybe the mask generation code in init_netmask() is not correct?

I think you missread the patch. So I posted the complete patched 
function.  The problem was sin6->sin6_addr.s6_addr should be 
sin6->sin6_addr.s6_addr32.  It doesn't make sense to compare an 8 bit 
value with a 32 bit value.  Notice it's really comparing "address" to 
"sin6" so it's really ((address ^ sin6) & mask).  sin6 is a poor choice 
of variable names in this case since it makes it hard to interpret the code.

static int
check_subnet_v6(const struct sockaddr_in6 *address,
         const struct sockaddr_in6 *mask, const struct addrinfo *ai)
{
     for (; ai; ai = ai->ai_next) {
         struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)ai->ai_addr;

         if (sin6->sin6_family != AF_INET6)
             continue;

         if (mask_match(address->sin6_addr.s6_addr32[0],
                 sin6->sin6_addr.s6_addr32[0],
                       mask->sin6_addr.s6_addr32[0]) &&
             mask_match(address->sin6_addr.s6_addr32[1],
                 sin6->sin6_addr.s6_addr32[1],
                       mask->sin6_addr.s6_addr32[1]) &&
             mask_match(address->sin6_addr.s6_addr32[2],
                 sin6->sin6_addr.s6_addr32[2],
                       mask->sin6_addr.s6_addr32[2]) &&
             mask_match(address->sin6_addr.s6_addr32[3],
                 sin6->sin6_addr.s6_addr32[3],
                       mask->sin6_addr.s6_addr32[3]))
             return 1;
     }
     return 0;
}


--- ./support/export/client.c.orig    2009-11-30 08:06:18.000000000 -0700
+++ ./support/export/client.c    2009-12-02 15:16:55.361725808 -0700
@@ -505,16 +505,16 @@ check_subnet_v6(const struct sockaddr_in
              continue;

          if (mask_match(address->sin6_addr.s6_addr32[0],
-                sin6->sin6_addr.s6_addr[0],
+                sin6->sin6_addr.s6_addr32[0],
                        mask->sin6_addr.s6_addr32[0]) &&
              mask_match(address->sin6_addr.s6_addr32[1],
-                sin6->sin6_addr.s6_addr[1],
+                sin6->sin6_addr.s6_addr32[1],
                        mask->sin6_addr.s6_addr32[1]) &&
              mask_match(address->sin6_addr.s6_addr32[2],
-                sin6->sin6_addr.s6_addr[2],
+                sin6->sin6_addr.s6_addr32[2],
                        mask->sin6_addr.s6_addr32[2]) &&
              mask_match(address->sin6_addr.s6_addr32[3],
-                sin6->sin6_addr.s6_addr[3],
+                sin6->sin6_addr.s6_addr32[3],
                        mask->sin6_addr.s6_addr32[3]))
              return 1;
      }



  reply	other threads:[~2009-12-03  0:30 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-02 22:50 [NFS] Nfs4 over Ipv6 patch to fix ipv6 subnetting in /etc/exports Kelly Anderson
     [not found] ` <4B16EF49.8040106-lACMDn57031vQQPgy9v2K1aTQe2KTcn/@public.gmane.org>
2009-12-02 23:32   ` Chuck Lever
2009-12-03  0:16     ` Kelly Anderson [this message]
     [not found]       ` <4B170344.9070205-lACMDn57031vQQPgy9v2K1aTQe2KTcn/@public.gmane.org>
2009-12-03  0:25         ` Chuck Lever
2009-12-11 18:19   ` Steve Dickson
     [not found]     ` <4B228D4B.7000007-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-12-11 18:24       ` Chuck Lever

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=4B170344.9070205@silka.with-linux.com \
    --to=kelly-lacmdn57031vqqpgy9v2k1atqe2ktcn/@public.gmane.org \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.