Ack: [PATCH][xenial] UBUNTU: SAUCE: kernfs: Do not match superblock in another user namespace when mounting

Leann Ogasawara leann.ogasawara at canonical.com
Fri Apr 15 16:28:42 UTC 2016


On 04/15/2016 09:07 AM, Seth Forshee wrote:
> BugLink: http://bugs.launchpad.net/bugs/1570906
> 
> Two kernfs-based filesystems are currently mountable from
> non-init user namespaces, sysfs and cgroupfs. Both of these have
> use cases which end up attempting to mount the same superblock
> from different user namespaces, but sget() no longer allows this
> so these mount attempts will fail.
> 
> Update kernfs_test_super() to return false whenever s_user_ns is
> not the current user namespace, resulting in a new super block
> being allocated for these mounts. kernfs, sysfs, and cgroupfs are
> all equipped to handle this situation.
> 
> Signed-off-by: Seth Forshee <seth.forshee at canonical.com>

Tested-by: Tycho Andersen <tycho.andersen at canonical.com>
Acked-by: Leann Ogasawara <leann.ogasawara at canonical.com>

> ---
>  fs/kernfs/mount.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c
> index 9f05c5a..6d178f2 100644
> --- a/fs/kernfs/mount.c
> +++ b/fs/kernfs/mount.c
> @@ -171,7 +171,8 @@ static int kernfs_test_super(struct super_block *sb, void *data)
>  	struct kernfs_super_info *sb_info = kernfs_info(sb);
>  	struct kernfs_super_info *info = data;
>  
> -	return sb_info->root == info->root && sb_info->ns == info->ns;
> +	return sb_info->root == info->root && sb_info->ns == info->ns &&
> +	       sb->s_user_ns == current_user_ns();
>  }
>  
>  static int kernfs_set_super(struct super_block *sb, void *data)
> 




More information about the kernel-team mailing list