mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	NFS: When mounting, don't share filesystems between different user namespaces
If two different containers that share the same network namespace attempt to mount the same filesystem, we should not allow them to share the same super block if they do not share the same user namespace, since the user mappings on the wire will need to differ. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
		
							parent
							
								
									c207db2f5d
								
							
						
					
					
						commit
						3b7eb5e35d
					
				
					 1 changed files with 17 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -2485,6 +2485,21 @@ static int nfs_compare_super_address(struct nfs_server *server1,
 | 
			
		|||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int nfs_compare_userns(const struct nfs_server *old,
 | 
			
		||||
		const struct nfs_server *new)
 | 
			
		||||
{
 | 
			
		||||
	const struct user_namespace *oldns = &init_user_ns;
 | 
			
		||||
	const struct user_namespace *newns = &init_user_ns;
 | 
			
		||||
 | 
			
		||||
	if (old->client && old->client->cl_cred)
 | 
			
		||||
		oldns = old->client->cl_cred->user_ns;
 | 
			
		||||
	if (new->client && new->client->cl_cred)
 | 
			
		||||
		newns = new->client->cl_cred->user_ns;
 | 
			
		||||
	if (oldns != newns)
 | 
			
		||||
		return 0;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int nfs_compare_super(struct super_block *sb, void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct nfs_sb_mountdata *sb_mntdata = data;
 | 
			
		||||
| 
						 | 
				
			
			@ -2498,6 +2513,8 @@ static int nfs_compare_super(struct super_block *sb, void *data)
 | 
			
		|||
		return 0;
 | 
			
		||||
	if (memcmp(&old->fsid, &server->fsid, sizeof(old->fsid)) != 0)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (!nfs_compare_userns(old, server))
 | 
			
		||||
		return 0;
 | 
			
		||||
	return nfs_compare_mount_options(sb, server, mntflags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue