mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-22 09:58:09 +00:00
mount: handle a circular reference in mount tree
$ cat /proc/self/mountinfo ... 1 1 0:2 / / rw - rootfs rootfs rw,size=373396k,nr_inodes=93349 ... You can see that mnt_id and parent_mnt_id are equals here. This patch interpretes this case as a root mount in a tree. 0'th mount is rootfs, which is mounted in init_mount_tree(). We don't see it in cases when system makes chroot, because of static int show_mountinfo(struct seq_file *m, struct vfsmount *mnt) ... /* mountpoints outside of chroot jail will give SEQ_SKIP on this */ err = seq_path_root(m, &mnt_path, &root, " \t\n\\"); Cc: beproject criu <beprojectcriu@gmail.com> Cc: Christopher Covington <cov@codeaurora.org> Reported-by: beproject criu <beprojectcriu@gmail.com> Reviewed-by: Christopher Covington <cov@codeaurora.org> Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
c948c8bc3a
commit
5050c3bbfa
7
mount.c
7
mount.c
@ -251,7 +251,12 @@ static struct mount_info *mnt_build_ids_tree(struct mount_info *list)
|
|||||||
struct mount_info *p;
|
struct mount_info *p;
|
||||||
|
|
||||||
pr_debug("\t\tWorking on %d->%d\n", m->mnt_id, m->parent_mnt_id);
|
pr_debug("\t\tWorking on %d->%d\n", m->mnt_id, m->parent_mnt_id);
|
||||||
p = __lookup_mnt_id(list, m->parent_mnt_id);
|
|
||||||
|
if (m->mnt_id != m->parent_mnt_id)
|
||||||
|
p = __lookup_mnt_id(list, m->parent_mnt_id);
|
||||||
|
else /* a circular mount reference. It's rootfs or smth like it. */
|
||||||
|
p = NULL;
|
||||||
|
|
||||||
if (!p) {
|
if (!p) {
|
||||||
/* This should be / */
|
/* This should be / */
|
||||||
if (root == NULL && is_root_mount(m)) {
|
if (root == NULL && is_root_mount(m)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user