[CRIU] [PATCH] mnt: Helper and comment for bind mount validation

Andrew Vagin avagin at parallels.com
Fri Oct 31 04:01:33 PDT 2014


Acked-by: Andrew Vagin <avagin at parallels.com>

On Fri, Oct 31, 2014 at 01:50:11PM +0400, Pavel Emelyanov wrote:
> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
> ---
>  mount.c | 30 ++++++++++++++++++++++--------
>  1 file changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/mount.c b/mount.c
> index 1de37a0..b142c47 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -397,6 +397,26 @@ static int validate_shared(struct mount_info *m)
>  	return 0;
>  }
>  
> +/*
> + * Find the mount_info from which the respective bind-mount
> + * can be created. It can be either an FS-root mount, or the
> + * root of the tree (the latter only if its root path is the
> + * sub-path of the bind mount's root).
> + */
> +
> +static struct mount_info *find_fsroot_mount_for(struct mount_info *bm)
> +{
> +	struct mount_info *sm;
> +
> +	list_for_each_entry(sm, &bm->mnt_bind, mnt_bind)
> +		if (fsroot_mounted(sm) ||
> +				(sm->parent == NULL &&
> +				 strstartswith(bm->root, sm->root)))
> +			return sm;
> +
> +	return NULL;
> +}
> +
>  static int validate_mounts(struct mount_info *info, bool for_dump)
>  {
>  	struct mount_info *m, *t;
> @@ -427,14 +447,8 @@ static int validate_mounts(struct mount_info *info, bool for_dump)
>  				return -1;
>  			}
>  		} else {
> -			list_for_each_entry(t, &m->mnt_bind, mnt_bind) {
> -				if (fsroot_mounted(t) ||
> -						(t->parent == NULL &&
> -						 strstartswith(m->root, t->root)))
> -					break;
> -			}
> -
> -			if (&t->mnt_bind == &m->mnt_bind) {
> +			t = find_fsroot_mount_for(m);
> +			if (!t) {
>  				int ret;
>  
>  				if (for_dump) {
> -- 
> 1.8.4.2
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list