[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