forked from Minki/linux
NFS: NFSv2/NFSv3: Use cred from fs_context during mount
There was refactoring done to use the fs_context for mounting done in:62a55d088c
: NFS: Additional refactoring for fs_context conversion This made it so that the net_ns is fetched from the fs_context (the netns that fsopen is called in). This change also makes it so that the credential fetched during fsopen is used as well as the net_ns. NFS has already had a number of changes to prepare it for user namespaces:1a58e8a0e5
: NFS: Store the credential of the mount process in the nfs_server264d948ce7
: NFS: Convert NFSv3 to use the container user namespacec207db2f5d
: NFS: Convert NFSv2 to use the container user namespace Previously, different credentials could be used for creation of the fs_context versus creation of the nfs_server, as FSCONFIG_CMD_CREATE did the actual credential check, and that's where current_creds() were fetched. This meant that the user namespace which fsopen was called in could be a non-init user namespace. This still requires that the user that calls FSCONFIG_CMD_CREATE has CAP_SYS_ADMIN in the init user ns. This roughly allows a privileged user to mount on behalf of an unprivileged usernamespace, by forking off and calling fsopen in the unprivileged user namespace. It can then pass back that fsfd to the privileged process which can configure the NFS mount, and then it can call FSCONFIG_CMD_CREATE before switching back into the mount namespace of the container, and finish up the mounting process and call fsmount and move_mount. Signed-off-by: Sargun Dhillon <sargun@sargun.me> Tested-by: Alban Crequy <alban.crequy@gmail.com> Fixes:62a55d088c
("NFS: Additional refactoring for fs_context conversion") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
b6d49ecd10
commit
d18a9d3fa0
@ -571,7 +571,7 @@ static int nfs_start_lockd(struct nfs_server *server)
|
||||
1 : 0,
|
||||
.net = clp->cl_net,
|
||||
.nlmclnt_ops = clp->cl_nfs_mod->rpc_ops->nlmclnt_ops,
|
||||
.cred = current_cred(),
|
||||
.cred = server->cred,
|
||||
};
|
||||
|
||||
if (nlm_init.nfs_version > 3)
|
||||
@ -985,7 +985,7 @@ struct nfs_server *nfs_create_server(struct fs_context *fc)
|
||||
if (!server)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
server->cred = get_cred(current_cred());
|
||||
server->cred = get_cred(fc->cred);
|
||||
|
||||
error = -ENOMEM;
|
||||
fattr = nfs_alloc_fattr();
|
||||
|
Loading…
Reference in New Issue
Block a user