[CRIU] [PATCH] vdso: Defer handling untill all zones are restored
Andrew Vagin
avagin at parallels.com
Mon Aug 4 07:18:17 PDT 2014
On Mon, Aug 04, 2014 at 04:55:32PM +0400, Cyrill Gorcunov wrote:
> In worst case we might be tryin to proxify vdso zone
> when vvar only is remmaped but vdso itself is not yet
> (left and right zones shifting). Thus vdso_proxify
> will complain that vdso is not yet mapped refusing
> to restore.
>
> Thus wait until everything is re-mapped then call
> for proxification helper.
Acked-by: Andrew Vagin <avagin at parallels.com>
>
> Reported: Mr. Jenkins
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
> pie/restorer.c | 34 ++++++++++++++++------------------
> 1 file changed, 16 insertions(+), 18 deletions(-)
>
> diff --git a/pie/restorer.c b/pie/restorer.c
> index 1b05f59edefe..16a75bf0c0d0 100644
> --- a/pie/restorer.c
> +++ b/pie/restorer.c
> @@ -728,15 +728,6 @@ long __export_restore_task(struct task_restore_args *args)
> if (vma_remap(vma_premmaped_start(vma_entry),
> vma_entry->start, vma_entry_len(vma_entry)))
> goto core_restore_end;
> -#ifdef CONFIG_VDSO
> - if (vma_entry_is(vma_entry, VMA_AREA_VDSO) ||
> - vma_entry_is(vma_entry, VMA_AREA_VVAR)) {
> - if (vdso_proxify("left dumpee", &args->vdso_sym_rt,
> - args->vdso_rt_parked_at,
> - i, args->tgt_vmas, args->nr_vmas))
> - goto core_restore_end;
> - }
> -#endif
> }
>
> /* Shift private vma-s to the right */
> @@ -758,15 +749,6 @@ long __export_restore_task(struct task_restore_args *args)
> if (vma_remap(vma_premmaped_start(vma_entry),
> vma_entry->start, vma_entry_len(vma_entry)))
> goto core_restore_end;
> -#ifdef CONFIG_VDSO
> - if (vma_entry_is(vma_entry, VMA_AREA_VDSO) ||
> - vma_entry_is(vma_entry, VMA_AREA_VVAR)) {
> - if (vdso_proxify("right dumpee", &args->vdso_sym_rt,
> - args->vdso_rt_parked_at,
> - i, args->tgt_vmas, args->nr_vmas))
> - goto core_restore_end;
> - }
> -#endif
> }
>
> /*
> @@ -789,6 +771,22 @@ long __export_restore_task(struct task_restore_args *args)
> }
> }
>
> +#ifdef CONFIG_VDSO
> + /*
> + * Proxify vDSO.
> + */
> + for (i = 0; i < args->nr_vmas; i++) {
> + if (vma_entry_is(vma_entry, VMA_AREA_VDSO) ||
> + vma_entry_is(vma_entry, VMA_AREA_VVAR)) {
> + if (vdso_proxify("dumpee", &args->vdso_sym_rt,
> + args->vdso_rt_parked_at,
> + i, args->tgt_vmas, args->nr_vmas))
> + goto core_restore_end;
> + break;
> + }
> + }
> +#endif
> +
> /*
> * Walk though all VMAs again to drop PROT_WRITE
> * if it was not there.
> --
> 1.9.3
>
More information about the CRIU
mailing list