Re: [nfsv4] 4.0 trunking

"J. Bruce Fields" <bfields@fieldses.org> Thu, 22 September 2016 16:04 UTC

Return-Path: <bfields@fieldses.org>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6FEA612BCAF for <nfsv4@ietfa.amsl.com>; Thu, 22 Sep 2016 09:04:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.218
X-Spam-Level:
X-Spam-Status: No, score=-4.218 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-2.316, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ehLpA0uJlXTK for <nfsv4@ietfa.amsl.com>; Thu, 22 Sep 2016 09:04:48 -0700 (PDT)
Received: from fieldses.org (fieldses.org [IPv6:2600:3c00::f03c:91ff:fe50:41d6]) by ietfa.amsl.com (Postfix) with ESMTP id EAD7012B363 for <nfsv4@ietf.org>; Thu, 22 Sep 2016 09:04:47 -0700 (PDT)
Received: by fieldses.org (Postfix, from userid 2815) id BBC982447; Thu, 22 Sep 2016 12:04:45 -0400 (EDT)
Date: Thu, 22 Sep 2016 12:04:45 -0400
From: "J. Bruce Fields" <bfields@fieldses.org>
To: David Noveck <davenoveck@gmail.com>
Message-ID: <20160922160445.GD30401@fieldses.org>
References: <BBB2EBDC-6F05-44C1-B45A-C84C24A9AD7F@netapp.com> <20160920213931.GC12789@fieldses.org> <CADaq8jeqr9WPeBeV0ruxwy+5omfgHhJFjAR=tCGL3N-Yjt0PuQ@mail.gmail.com> <20160921024531.GA17232@fieldses.org> <CADaq8jdUJG7zBwn7f2xtLO3gf4nvwjM2H00E6N2oTGP2b9Nzww@mail.gmail.com> <20160921141409.GA20963@fieldses.org> <20160921195339.GC24084@fieldses.org> <CADaq8jfHUr_A=90UTPG7M5+7to3bM1DiYc6sAyYWYOXQTGeTiA@mail.gmail.com> <20160922125145.GA30013@fieldses.org> <CADaq8jdW4NwFV-Lf8fjjcq48Xc+ZJnc-Gn+bOwqXLm6zH9AOUw@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <CADaq8jdW4NwFV-Lf8fjjcq48Xc+ZJnc-Gn+bOwqXLm6zH9AOUw@mail.gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/U0lcmd5UVJHlQnS4lntexke-kAA>
Cc: "Adamson, Andy" <William.Adamson@netapp.com>, "nfsv4@ietf.org" <nfsv4@ietf.org>
Subject: Re: [nfsv4] 4.0 trunking
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 22 Sep 2016 16:04:49 -0000

On Thu, Sep 22, 2016 at 10:46:35AM -0400, David Noveck wrote:
> > > As it now appears that the Linux client had
> > > implemented something different than that, the correctness of > > the
> algorithm
> > > in section 5.8 has to be considered an open question.
> 
> > It has the same problem;
> 
> Please explain what the problem is.  If we don't agree on what the problem
> is, it is hard to come up with a solution.

OK, my attempt, from scratch:

> One way to do this would be to give a case where a
> client implementing section 5.8 might interact with two servers and could
> arrive at the wrong result, assuming the servers meet the requirements of
> RFC7530, which are, as you pointed out, considerably weaker than those in
> the VS paragraph in section 5.8.

I'll stick a variation on the shorthands I've been using but I beleive
I'm following section 5.8 otherwise:

1. A previous SETCLIENTID to X1 returned (clientid, verifier) (C, V1).
It was confirmed and kept renewed since.

2. A new SETCLIENTID to X2 returns (C, V2).

3. Confirm it with a SETCLIENTID_CONFIRM(C, V2) to X2.

4. Send a callback-updating SETCLIENTID(C) to X1, which returns (C, V1').

5. Send a SETCLIENTID_CONFIRM(C, V1') to X2.

Then consider X1 and X2 the same server iff 5 succeeds.

This can incorrectly identify X1 and X2 as the same if V1' happens to
equal V2.  In that case X2 will see the SETCLIENTID_CONFIRM as a replay
of the one in step 3.

The RFC is aware of the possibility but expects it to be rare because
clientids and confirm verifiers are both 64-bit values, and if they were
each chosen uniformly at random from that space, the chance of both
colliding would be insignificant.

In practice they may be chosen in a predictable fashion from a limited
part of the 64-bit space.  And the birthday paradox compounds this
problem in the presence of multiple servers.

Do we agree on the problem?

--b.