[CRIU] [PATCH] mnt: relax constraints on fuse mounts
Pavel Emelyanov
xemul at parallels.com
Thu Apr 9 02:37:06 PDT 2015
On 04/08/2015 09:13 PM, Tycho Andersen wrote:
> 1. If a fuse connection is present, but there are no fuse mounts of that type
> in the mount namespace, don't refuse to dump.
> 2. If there are mounts of that type in the container but they are external,
> we're going to bind them anyway, so there's no fuse-specific things that
> need to be done, so it is safe to dump.
>
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> ---
> mount.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/mount.c b/mount.c
> index 71c39bf..700c303 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -1024,6 +1024,47 @@ out:
> return ret;
> }
>
> +static int fusectl_dump(struct mount_info *pm)
> +{
> + int fd, ret = -1;
> + struct dirent *de;
> + DIR *fdir = NULL;
> +
> + fd = open_mountpoint(pm);
> + if (fd < 0)
> + return -1;
> +
> + fdir = fdopendir(fd);
> + if (fdir == NULL) {
> + close(fd);
> + return -1;
> + }
> +
> + while ((de = readdir(fdir))) {
> + int id;
> + struct mount_info *it;
> +
> + if (dir_dots(de))
> + continue;
> +
> + if (sscanf(de->d_name, "%d", &id) != 1) {
> + pr_err("wrong number of items scanned in fusectl dump\n");
> + goto out;
> + }
> +
> + for (it = mntinfo; it; it = it->next) {
> + if (id == minor(it->s_dev) && !it->external) {
I'm not sure that minor number match is enough. Should we also check the
it->type being fuse?
> + pr_err("%s is a fuse mount but not external\n", it->mountpoint);
> + goto out;
> + }
> + }
> + }
> +
> + ret = 0;
> +out:
> + closedir(fdir);
> + return ret;
> +}
>
> static int dump_empty_fs(struct mount_info *pm)
> {
> @@ -1102,7 +1143,7 @@ static struct fstype fstypes[] = {
> .code = FSTYPE__SECURITYFS,
> }, {
> .name = "fusectl",
> - .dump = dump_empty_fs,
> + .dump = fusectl_dump,
> .code = FSTYPE__FUSECTL,
> }, {
> .name = "debugfs",
>
More information about the CRIU
mailing list