git: 6118587172ba - main - rtld-elf: Fix VDSO Obj_Entry mapsize and report in utrace(2)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 15 Aug 2025 22:21:51 UTC
The branch main has been updated by jrtc27:
URL: https://cgit.FreeBSD.org/src/commit/?id=6118587172babee538fb8e461b9a607ea987e342
commit 6118587172babee538fb8e461b9a607ea987e342
Author: Jessica Clarke <jrtc27@FreeBSD.org>
AuthorDate: 2025-08-15 22:21:35 +0000
Commit: Jessica Clarke <jrtc27@FreeBSD.org>
CommitDate: 2025-08-15 22:21:35 +0000
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
---
libexec/rtld-elf/rtld.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 17196f55c271..8977d5947010 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -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);
}