]> git.baikalelectronics.ru Git - kernel.git/commit
nfsd: Use correct credential for NFSv4.0 callback with GSS
authorChuck Lever <chuck.lever@oracle.com>
Thu, 16 Aug 2018 16:06:04 +0000 (12:06 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 22 Aug 2018 22:32:07 +0000 (18:32 -0400)
commit8c97fa1b23c53fa77e930d10ff0709c355d63e4d
tree92ca5be73a6eb66c41790171e0a7e05bb9f9e77f
parent00fcada838702b83f6daa292eb60eb718b073184
nfsd: Use correct credential for NFSv4.0 callback with GSS

I've had trouble when operating a multi-homed Linux NFS server with
Kerberos using NFSv4.0. Lately, I've seen my clients reporting
this (and then hanging):

May  9 11:43:26 manet kernel: NFS: NFSv4 callback contains invalid cred

The client-side commit 020be838743f ("nfs4: copy acceptor name from
context to nfs_client") appears to be related, but I suspect this
problem has been going on for some time before that.

RFC 7530 Section 3.3.3 says:
> For Kerberos V5, nfs/hostname would be a server principal in the
> Kerberos Key Distribution Center database.  This is the same
> principal the client acquired a GSS-API context for when it issued
> the SETCLIENTID operation ...

In other words, an NFSv4.0 client expects that the server will use
the same GSS principal for callback that the client used to
establish its lease. For example, if the client used the service
principal "nfs@server.domain" to establish its lease, the server
is required to use "nfs@server.domain" when performing NFSv4.0
callback operations.

The Linux NFS server currently does not. It uses a common service
principal for all callback connections. Sometimes this works as
expected, and other times -- for example, when the server is
accessible via multiple hostnames -- it won't work at all.

This patch scrapes the target name from the client credential,
and uses that for the NFSv4.0 callback credential. That should
be correct much more often.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4callback.c