[CRIU] [PATCH] mount: resolve parent mount of symbolic link correctly
Andrei Vagin
avagin at gmail.com
Wed Jul 27 14:32:41 PDT 2016
On Wed, Jul 27, 2016 at 2:11 PM, Katerina Koukiou
<k.koukiou at googlemail.com> wrote:
>
>
> On Wed, Jul 27, 2016 at 1:39 AM, Andrew Vagin <avagin at virtuozzo.com> wrote:
>>
>> On Tue, Jul 26, 2016 at 04:15:35PM +0300, Pavel Emelyanov wrote:
>> > On 07/26/2016 01:42 AM, Andrew Vagin wrote:
>> > > On Mon, Jul 25, 2016 at 02:26:01PM +0000, Katerina Koukiou wrote:
>> > >> When using --root option in criu dump, when the mountpoint passed
>> > >> contains a symbolic link, criu does not resolve its parent correctly.
>> > >> e.g when passing --root /run/rootfs, dump finishes successfully;
>> > >> but when /var/run/rootfs is passed, where /var/run is symbolic link
>> > >> to
>> > >> /run it exits with error "New root and old root are the same".
>> > >>
>> > >> Signed-off-by: Katerina Koukiou <k.koukiou at gmail.com>
>> > >> ---
>> > >> criu/mount.c | 10 +++++++++-
>> > >> 1 file changed, 9 insertions(+), 1 deletion(-)
>> > >>
>> > >> diff --git a/criu/mount.c b/criu/mount.c
>> > >> index 7c280c0..0cd83af 100644
>> > >> --- a/criu/mount.c
>> > >> +++ b/criu/mount.c
>> > >> @@ -3420,6 +3420,8 @@ int prepare_mnt_ns(void)
>> > >> return -1;
>> > >> } else {
>> > >> struct mount_info *mi;
>> > >> + char *ret;
>> > >> + char path[PATH_MAX + 1];
>> > >
>> > > PATH_MAX is enough, it includes '\0'
>> > >>
>> > >> /*
>> > >> * The whole tree of mountpoints is to be moved into one
>> > >> @@ -3428,8 +3430,14 @@ int prepare_mnt_ns(void)
>> > >> * with a single umount call later.
>> > >> */
>> > >>
>> > >> + ret = realpath(opts.root, path);
>> > >
>> > > realpath returns a string, but a type of ret is int.
>> >
>> > No, there's new char *ret in this block :)
>>
>> Sorry, I haven't noticed this. Thanks.
>
>
> It's ugly indeed. I can send a v2 without using ret for the check if needed.
> Btw, any idea why the test suite currently fails on
> zdtm/static/helper_zombie_child
> test on restore?
It is a bug in the test system. I've fixed it.
https://patchwork.criu.org/series/399/
>
>> >
>> > >> + if (!ret) {
>> > >> + pr_err("Unable to find real path for %s\n",
>> > >> opts.root);
>> > >> + return -1;
>> > >> + }
>> > >> +
>> > >> /* moving a mount residing under a shared mount is
>> > >> invalid. */
>> > >> - mi = mount_resolve_path(ns.mnt.mntinfo_tree, opts.root);
>> > >> + mi = mount_resolve_path(ns.mnt.mntinfo_tree, path);
>> > >> if (mi == NULL) {
>> > >> pr_err("Unable to find mount point for %s\n",
>> > >> opts.root);
>> > >> return -1;
>> > >> --
>> > >> 2.7.3
>> > >>
>> > >> _______________________________________________
>> > >> CRIU mailing list
>> > >> CRIU at openvz.org
>> > >> https://lists.openvz.org/mailman/listinfo/criu
>> > > _______________________________________________
>> > > CRIU mailing list
>> > > CRIU at openvz.org
>> > > https://lists.openvz.org/mailman/listinfo/criu
>> > > .
>> > >
>> >
>
>
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
>
More information about the CRIU
mailing list