[CRIU] Error (pie-util-vdso.c:190): vdso: Not all dynamic entries are present

Dmitry Safonov dsafonov at virtuozzo.com
Tue Jun 7 05:24:13 PDT 2016


On 06/07/2016 01:29 AM, Tycho Andersen wrote:
> Hi guys,
>
> With kernel 4.6 (and maybe earlier, although not with 4.4), I'm
> getting the error in the subject line. The full restore log is,
>
> (00.000044) File tty[8800:e] will be restored from inherit fd 5
> (00.004389) Pagemap is fully functional
> (00.004422) Found task size of 7ffffffff000
> (00.004489) cpu: fpu:1 fxsr:1 xsave:0
> (00.004590) vdso: Parsing at 7ffcc11ca000 7ffcc11cb000
> (00.004597) vdso: PT_LOAD p_vaddr: 0
> (00.004601) Error (pie-util-vdso.c:190): vdso: Not all dynamic entries are present
>
> The symptom is that the phdr we get for PT_DYNAMIC has p_filesz == 0,
> so the loop in parse_elf_dynamic() never executes.
>
> Any ideas?
>

Hi Tycho!

Could you try with the following diff?

--->8---
diff --git a/criu/pie/util-vdso.c b/criu/pie/util-vdso.c
index 13b2e5316db7..2033cdd82f90 100644
--- a/criu/pie/util-vdso.c
+++ b/criu/pie/util-vdso.c
@@ -160,7 +160,10 @@ static int parse_elf_dynamic(uintptr_t mem, size_t 
size, Phdr_t *dynamic,
  	if (__ptr_oob(addr, mem, size))
  		goto err_oob;

-	for (i = 0; i < dynamic->p_filesz / sizeof(*d);
+	pr_debug("Dynamic segment's file size %lu, memory size %lu\n",
+			(unsigned long)dynamic->p_filesz,
+			(unsigned long)dynamic->p_memsz);
+	for (i = 0; i < dynamic->p_memsz / sizeof(*d);
  			i++, addr += sizeof(Dyn_t)) {
  		if (__ptr_struct_end_oob(addr, sizeof(Dyn_t), mem, size))
  			goto err_oob;


More information about the CRIU mailing list