mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	NFS: Store the credential of the mount process in the nfs_server
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>
This commit is contained in:
		
							parent
							
								
									79caa5fad4
								
							
						
					
					
						commit
						1a58e8a0e5
					
				
					 5 changed files with 18 additions and 1 deletions
				
			
		| 
						 | 
					@ -500,7 +500,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
 | 
				
			||||||
		.program	= &nfs_program,
 | 
							.program	= &nfs_program,
 | 
				
			||||||
		.version	= clp->rpc_ops->version,
 | 
							.version	= clp->rpc_ops->version,
 | 
				
			||||||
		.authflavor	= flavor,
 | 
							.authflavor	= flavor,
 | 
				
			||||||
		.cred		= current_cred(),
 | 
							.cred		= cl_init->cred,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (test_bit(NFS_CS_DISCRTRY, &clp->cl_flags))
 | 
						if (test_bit(NFS_CS_DISCRTRY, &clp->cl_flags))
 | 
				
			||||||
| 
						 | 
					@ -655,6 +655,7 @@ static int nfs_init_server(struct nfs_server *server,
 | 
				
			||||||
		.proto = data->nfs_server.protocol,
 | 
							.proto = data->nfs_server.protocol,
 | 
				
			||||||
		.net = data->net,
 | 
							.net = data->net,
 | 
				
			||||||
		.timeparms = &timeparms,
 | 
							.timeparms = &timeparms,
 | 
				
			||||||
 | 
							.cred = server->cred,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	struct nfs_client *clp;
 | 
						struct nfs_client *clp;
 | 
				
			||||||
	int error;
 | 
						int error;
 | 
				
			||||||
| 
						 | 
					@ -923,6 +924,7 @@ void nfs_free_server(struct nfs_server *server)
 | 
				
			||||||
	ida_destroy(&server->lockowner_id);
 | 
						ida_destroy(&server->lockowner_id);
 | 
				
			||||||
	ida_destroy(&server->openowner_id);
 | 
						ida_destroy(&server->openowner_id);
 | 
				
			||||||
	nfs_free_iostats(server->io_stats);
 | 
						nfs_free_iostats(server->io_stats);
 | 
				
			||||||
 | 
						put_cred(server->cred);
 | 
				
			||||||
	kfree(server);
 | 
						kfree(server);
 | 
				
			||||||
	nfs_release_automount_timer();
 | 
						nfs_release_automount_timer();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -943,6 +945,8 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info,
 | 
				
			||||||
	if (!server)
 | 
						if (!server)
 | 
				
			||||||
		return ERR_PTR(-ENOMEM);
 | 
							return ERR_PTR(-ENOMEM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						server->cred = get_cred(current_cred());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	error = -ENOMEM;
 | 
						error = -ENOMEM;
 | 
				
			||||||
	fattr = nfs_alloc_fattr();
 | 
						fattr = nfs_alloc_fattr();
 | 
				
			||||||
	if (fattr == NULL)
 | 
						if (fattr == NULL)
 | 
				
			||||||
| 
						 | 
					@ -1009,6 +1013,8 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
 | 
				
			||||||
	if (!server)
 | 
						if (!server)
 | 
				
			||||||
		return ERR_PTR(-ENOMEM);
 | 
							return ERR_PTR(-ENOMEM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						server->cred = get_cred(source->cred);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	error = -ENOMEM;
 | 
						error = -ENOMEM;
 | 
				
			||||||
	fattr_fsinfo = nfs_alloc_fattr();
 | 
						fattr_fsinfo = nfs_alloc_fattr();
 | 
				
			||||||
	if (fattr_fsinfo == NULL)
 | 
						if (fattr_fsinfo == NULL)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,6 +84,7 @@ struct nfs_client_initdata {
 | 
				
			||||||
	u32 minorversion;
 | 
						u32 minorversion;
 | 
				
			||||||
	struct net *net;
 | 
						struct net *net;
 | 
				
			||||||
	const struct rpc_timeout *timeparms;
 | 
						const struct rpc_timeout *timeparms;
 | 
				
			||||||
 | 
						const struct cred *cred;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,6 +91,7 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv,
 | 
				
			||||||
		.proto = ds_proto,
 | 
							.proto = ds_proto,
 | 
				
			||||||
		.net = mds_clp->cl_net,
 | 
							.net = mds_clp->cl_net,
 | 
				
			||||||
		.timeparms = &ds_timeout,
 | 
							.timeparms = &ds_timeout,
 | 
				
			||||||
 | 
							.cred = mds_srv->cred,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	struct nfs_client *clp;
 | 
						struct nfs_client *clp;
 | 
				
			||||||
	char buf[INET6_ADDRSTRLEN + 1];
 | 
						char buf[INET6_ADDRSTRLEN + 1];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -870,6 +870,7 @@ static int nfs4_set_client(struct nfs_server *server,
 | 
				
			||||||
		.minorversion = minorversion,
 | 
							.minorversion = minorversion,
 | 
				
			||||||
		.net = net,
 | 
							.net = net,
 | 
				
			||||||
		.timeparms = timeparms,
 | 
							.timeparms = timeparms,
 | 
				
			||||||
 | 
							.cred = server->cred,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	struct nfs_client *clp;
 | 
						struct nfs_client *clp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -931,6 +932,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv,
 | 
				
			||||||
		.minorversion = minor_version,
 | 
							.minorversion = minor_version,
 | 
				
			||||||
		.net = mds_clp->cl_net,
 | 
							.net = mds_clp->cl_net,
 | 
				
			||||||
		.timeparms = &ds_timeout,
 | 
							.timeparms = &ds_timeout,
 | 
				
			||||||
 | 
							.cred = mds_srv->cred,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	char buf[INET6_ADDRSTRLEN + 1];
 | 
						char buf[INET6_ADDRSTRLEN + 1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1107,6 +1109,8 @@ struct nfs_server *nfs4_create_server(struct nfs_mount_info *mount_info,
 | 
				
			||||||
	if (!server)
 | 
						if (!server)
 | 
				
			||||||
		return ERR_PTR(-ENOMEM);
 | 
							return ERR_PTR(-ENOMEM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						server->cred = get_cred(current_cred());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	auth_probe = mount_info->parsed->auth_info.flavor_len < 1;
 | 
						auth_probe = mount_info->parsed->auth_info.flavor_len < 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set up the general RPC client */
 | 
						/* set up the general RPC client */
 | 
				
			||||||
| 
						 | 
					@ -1143,6 +1147,8 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
 | 
				
			||||||
	parent_server = NFS_SB(data->sb);
 | 
						parent_server = NFS_SB(data->sb);
 | 
				
			||||||
	parent_client = parent_server->nfs_client;
 | 
						parent_client = parent_server->nfs_client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						server->cred = get_cred(parent_server->cred);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Initialise the client representation from the parent server */
 | 
						/* Initialise the client representation from the parent server */
 | 
				
			||||||
	nfs_server_copy_userdata(server, parent_server);
 | 
						nfs_server_copy_userdata(server, parent_server);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -241,6 +241,9 @@ struct nfs_server {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* XDR related information */
 | 
						/* XDR related information */
 | 
				
			||||||
	unsigned int		read_hdrsize;
 | 
						unsigned int		read_hdrsize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* User namespace info */
 | 
				
			||||||
 | 
						const struct cred	*cred;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Server capabilities */
 | 
					/* Server capabilities */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue