Re: [PATCH] Documentation: Add an explanation of NFSv4 client identifiers

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

 



On Thu, 2022-04-14 at 14:13 +1000, NeilBrown wrote:
> On Wed, 13 Apr 2022, Chuck Lever III wrote:
> > 
> > > On Apr 12, 2022, at 3:06 AM, NeilBrown <neilb@xxxxxxx> wrote:
> > > 
> > > On Tue, 12 Apr 2022, Chuck Lever wrote:
> > > > +
> > > > +If a client's "co_ownerid" string or principal are not stable,
> > > > +state recovery after a server or client reboot is not
> > > > guaranteed.
> > > > +If a client unexpectedly restarts but presents a different
> > > > +"co_ownerid" string or principal to the server, the server
> > > > orphans
> > > > +the client's previous open and lock state. This blocks access
> > > > to
> > > > +locked files until the server removes the orphaned state.
> > > > +
> > > > +If the server restarts and a client presents a changed
> > > > "co_ownerid"
> > > > +string or principal to the server, the server will not allow
> > > > the
> > > > +client to reclaim its open and lock state, and may give those
> > > > locks
> > > > +to other clients in the mean time. This is referred to as
> > > > "lock
> > > > +stealing".
> > > 
> > > This is not a possible scenario with Linux NFS client.  The
> > > client
> > > assembles the string once from various sources, then uses it
> > > consistently at least until unmount or reboot.  Is it worth
> > > mentioning?
> > 
> > Neil, thanks for the eyes-on. I've integrated the other suggestions
> > in your reply. However there are some corner cases here that I'd
> > like to consider before proceeding.
> > 
> > Generally, preserving the cl_owner_id string is good defense
> > against
> > lock stealing. Looks like the Linux NFS client didn't do that
> > before
> > ceb3a16c070c ("NFSv4: Cache the NFSv4/v4.1 client owner_id in the
> > struct nfs_client").
> > 
> > If a server filesystem is migrated to a server that the client
> > hasn't
> > contacted before, and the client's uniquifier or hostname has
> > changed
> > since the client established its lease with the first server, there
> > is the possibility of lock stealing during transparent state
> > migration.
> > 
> > I'm also not certain how the Linux NFS client preserves the
> > principal
> > that was used when a lease is first established. It's going to use
> > Kerberos if possible, but what if the kernel's cred cache expires
> > and
> > the keytab has been altered in the meantime? I haven't walked
> > through
> > that code carefully enough to understand whether there is still a
> > vulnerability.
> > 
> 
> I don't think id stability relates to lock stealing.
> 
> - global uniqueness guards against stealing
> - stability guards against misplacing locks during migration
> ("stolen"
> - seems an inappropriate term as no entity an be blamed for
> stealing).
> 
> Certainly stability of both the identity and the credential are
> important.  If that stability is not provided then that is a kernel
> bug.
> As you say, ceb3a16c070c fixed a bug in this area.
> I don't think this document is an appropriate place to warn against
> kernel bugs - that doesn't fit with the purpose given in the intro.
> 
> I don't know know if the credential can change either - I hope not.
> IF the credential can actually change, that would be a kernel bug.
> IF the same credential cannot be renewed, that is a separate problem,
> but should be treated like any other credential that cannot be
> renewed.
> 
> I won't argue strongly against this text - I just don't see how it is
> appropriate and think it could be confusing.
> 

See RFC 5661, Section 2.4.3.

It is up to the server to enforce the correspondence between the lease
and the principal that owns that lease.

-- 
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@xxxxxxxxxxxxxxx






[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