rtld-elf: Fix VDSO Obj_Entry mapsize and report in utrace(2)

Subtracing addr is only appropriate for position-dependent objects,
where vaddrbase would also be the same value. For position-independent
objects, like the VDSO (which we already assume due to setting vaddrbase
to 0), the segments start at 0, not addr.

Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D51924
This commit is contained in:
Jessica Clarke
2025-08-15 23:21:35 +01:00
parent 69af14a57c
commit 6118587172
+3 -2
View File
@@ -3031,7 +3031,7 @@ load_kpreload(const void *addr)
}
obj->mapbase = __DECONST(caddr_t, addr);
obj->mapsize = segn->p_vaddr + segn->p_memsz - (Elf_Addr)addr;
obj->mapsize = segn->p_vaddr + segn->p_memsz;
obj->vaddrbase = 0;
obj->relocbase = obj->mapbase;
@@ -3060,7 +3060,8 @@ load_kpreload(const void *addr)
linkmap_add(obj); /* for GDB & dlinfo() */
max_stack_flags |= obj->stack_flags;
LD_UTRACE(UTRACE_LOAD_OBJECT, obj, obj->mapbase, 0, 0, obj->path);
LD_UTRACE(UTRACE_LOAD_OBJECT, obj, obj->mapbase, obj->mapsize, 0,
obj->path);
return (0);
}