The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e679319b840e7c3298a0b0c4149113d4bbe63110

commit e679319b840e7c3298a0b0c4149113d4bbe63110
Author:     John Baldwin <j...@freebsd.org>
AuthorDate: 2025-08-22 13:59:09 +0000
Commit:     John Baldwin <j...@freebsd.org>
CommitDate: 2025-08-22 13:59:09 +0000

    rtld: Compute obj->maxsize for obj_rtld
    
    Compute this while parsing the program headers in parse_rtld_phdr().
    
    Reviewed by:    kib
    Obtained from:  CheriBSD
    Sponsored by:   AFRL, DARPA
    Differential Revision:  https://reviews.freebsd.org/D52033
---
 libexec/rtld-elf/rtld.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 8977d5947010..a8a2a0fa5a07 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -2437,11 +2437,21 @@ parse_rtld_phdr(Obj_Entry *obj)
 {
        const Elf_Phdr *ph;
        Elf_Addr note_start, note_end;
+       bool first_seg;
 
+       first_seg = true;
        obj->stack_flags = PF_X | PF_R | PF_W;
        for (ph = obj->phdr;
            (const char *)ph < (const char *)obj->phdr + obj->phsize; ph++) {
                switch (ph->p_type) {
+               case PT_LOAD:
+                       if (first_seg) {
+                               obj->vaddrbase = rtld_trunc_page(ph->p_vaddr);
+                               first_seg = false;
+                       }
+                       obj->mapsize = rtld_round_page(ph->p_vaddr +
+                           ph->p_memsz) - obj->vaddrbase;
+                       break;
                case PT_GNU_STACK:
                        obj->stack_flags = ph->p_flags;
                        break;

Reply via email to