Skip to content

Commit

Permalink
NFS: Store the credential of the mount process in the nfs_server
Browse files Browse the repository at this point in the history
Store the credential of the mount process so that we can determine
information such as the user namespace.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
  • Loading branch information
Trond Myklebust authored and Anna Schumaker committed Apr 26, 2019
1 parent 79caa5f commit 1a58e8a
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 1 deletion.
8 changes: 7 additions & 1 deletion fs/nfs/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
.program = &nfs_program,
.version = clp->rpc_ops->version,
.authflavor = flavor,
.cred = current_cred(),
.cred = cl_init->cred,
};

if (test_bit(NFS_CS_DISCRTRY, &clp->cl_flags))
Expand Down Expand Up @@ -655,6 +655,7 @@ static int nfs_init_server(struct nfs_server *server,
.proto = data->nfs_server.protocol,
.net = data->net,
.timeparms = &timeparms,
.cred = server->cred,
};
struct nfs_client *clp;
int error;
Expand Down Expand Up @@ -923,6 +924,7 @@ void nfs_free_server(struct nfs_server *server)
ida_destroy(&server->lockowner_id);
ida_destroy(&server->openowner_id);
nfs_free_iostats(server->io_stats);
put_cred(server->cred);
kfree(server);
nfs_release_automount_timer();
}
Expand All @@ -943,6 +945,8 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info,
if (!server)
return ERR_PTR(-ENOMEM);

server->cred = get_cred(current_cred());

error = -ENOMEM;
fattr = nfs_alloc_fattr();
if (fattr == NULL)
Expand Down Expand Up @@ -1009,6 +1013,8 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
if (!server)
return ERR_PTR(-ENOMEM);

server->cred = get_cred(source->cred);

error = -ENOMEM;
fattr_fsinfo = nfs_alloc_fattr();
if (fattr_fsinfo == NULL)
Expand Down
1 change: 1 addition & 0 deletions fs/nfs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ struct nfs_client_initdata {
u32 minorversion;
struct net *net;
const struct rpc_timeout *timeparms;
const struct cred *cred;
};

/*
Expand Down
1 change: 1 addition & 0 deletions fs/nfs/nfs3client.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv,
.proto = ds_proto,
.net = mds_clp->cl_net,
.timeparms = &ds_timeout,
.cred = mds_srv->cred,
};
struct nfs_client *clp;
char buf[INET6_ADDRSTRLEN + 1];
Expand Down
6 changes: 6 additions & 0 deletions fs/nfs/nfs4client.c
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,7 @@ static int nfs4_set_client(struct nfs_server *server,
.minorversion = minorversion,
.net = net,
.timeparms = timeparms,
.cred = server->cred,
};
struct nfs_client *clp;

Expand Down Expand Up @@ -931,6 +932,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv,
.minorversion = minor_version,
.net = mds_clp->cl_net,
.timeparms = &ds_timeout,
.cred = mds_srv->cred,
};
char buf[INET6_ADDRSTRLEN + 1];

Expand Down Expand Up @@ -1107,6 +1109,8 @@ struct nfs_server *nfs4_create_server(struct nfs_mount_info *mount_info,
if (!server)
return ERR_PTR(-ENOMEM);

server->cred = get_cred(current_cred());

auth_probe = mount_info->parsed->auth_info.flavor_len < 1;

/* set up the general RPC client */
Expand Down Expand Up @@ -1143,6 +1147,8 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
parent_server = NFS_SB(data->sb);
parent_client = parent_server->nfs_client;

server->cred = get_cred(parent_server->cred);

/* Initialise the client representation from the parent server */
nfs_server_copy_userdata(server, parent_server);

Expand Down
3 changes: 3 additions & 0 deletions include/linux/nfs_fs_sb.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,9 @@ struct nfs_server {

/* XDR related information */
unsigned int read_hdrsize;

/* User namespace info */
const struct cred *cred;
};

/* Server capabilities */
Expand Down

0 comments on commit 1a58e8a

Please sign in to comment.