git-lib-map
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Sun, 10 Jul 2022 20:29:34 +0000 (21:29 +0100)
committerAurelien Jarno <aurel32@debian.org>
Sun, 10 Jul 2022 20:29:34 +0000 (21:29 +0100)
Committed for 2.35

commit 8c0727af63198661c0ae3641a9d66609021754a7
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Fri Dec 31 18:17:40 2021 +0100

    hurd: Avoid overzealous shared objects constraints

    407765e9f24f ("hurd: Fix ELF_MACHINE_USER_ADDRESS_MASK value") switched
    ELF_MACHINE_USER_ADDRESS_MASK from 0xf8000000UL to 0xf0000000UL to let
    libraries etc. get loaded at 0x08000000. But
    ELF_MACHINE_USER_ADDRESS_MASK is actually only meaningful for the main
    program anyway, so keep it at 0xf8000000UL to prevent the program loader
    from putting ld.so beyond 0x08000000. And conversely, drop the use of
    ELF_MACHINE_USER_ADDRESS_MASK for shared objects, which don't need any
    constraints since the program will have already be loaded by then.

Gbp-Pq: Topic hurd-i386
Gbp-Pq: Name git-lib-map.diff

sysdeps/i386/dl-machine.h
sysdeps/mach/hurd/dl-sysdep.c

index 23e9cc3bfbb2cde52a2b2f70ffecedca8e5ec7f2..8f22e5cf05fa3204b39ab59d4e02fcffa6bdac5b 100644 (file)
@@ -143,7 +143,7 @@ extern ElfW(Addr) _dl_profile_fixup (struct link_map *l,
 
 /* Mask identifying addresses reserved for the user program,
    where the dynamic linker should not map anything.  */
-#define ELF_MACHINE_USER_ADDRESS_MASK  0xf0000000UL
+#define ELF_MACHINE_USER_ADDRESS_MASK  0xf8000000UL
 
 /* Initial entry point code for the dynamic linker.
    The C function `_dl_start' is the real entry point;
index 968a58f6683c2df4ed704edb2c716fa160807ae8..b1a151abc18a08de09416070a17fe96d9bad5609 100644 (file)
@@ -476,7 +476,7 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)
 
   mapaddr = (vm_address_t) addr;
   err = __vm_map (__mach_task_self (),
-                 &mapaddr, (vm_size_t) len, ELF_MACHINE_USER_ADDRESS_MASK,
+                 &mapaddr, (vm_size_t) len, 0,
                  !(flags & MAP_FIXED),
                  memobj_rd,
                  (vm_offset_t) offset,
@@ -491,7 +491,7 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)
       if (! err)
        err = __vm_map (__mach_task_self (),
                        &mapaddr, (vm_size_t) len,
-                       ELF_MACHINE_USER_ADDRESS_MASK,
+                       0,
                        !(flags & MAP_FIXED),
                        memobj_rd, (vm_offset_t) offset,
                        flags & (MAP_COPY|MAP_PRIVATE),