Page MenuHomeFreeBSD

D4791.id11949.diff
No OneTemporary

D4791.id11949.diff

Index: libexec/rtld-elf/rtld.h
===================================================================
--- libexec/rtld-elf/rtld.h
+++ libexec/rtld-elf/rtld.h
@@ -264,6 +264,7 @@
bool valid_hash_sysv : 1; /* A valid System V hash hash tag is available */
bool valid_hash_gnu : 1; /* A valid GNU hash tag is available */
bool dlopened : 1; /* dlopen()-ed (vs. load statically) */
+ bool writable_dynamic : 1; /* PT_DYNAMIC is writable */
struct link_map linkmap; /* For GDB and dlinfo() */
Objlist dldags; /* Object belongs to these dlopened DAGs (%) */
Index: libexec/rtld-elf/rtld.c
===================================================================
--- libexec/rtld-elf/rtld.c
+++ libexec/rtld-elf/rtld.c
@@ -1144,13 +1144,13 @@
* is mapped read-only. DT_MIPS_RLD_MAP is used instead.
*/
-#ifndef __mips__
case DT_DEBUG:
+ if (!obj->writable_dynamic)
+ break;
if (!early)
dbg("Filling in DT_DEBUG entry");
((Elf_Dyn*)dynp)->d_un.d_ptr = (Elf_Addr) &r_debug;
break;
-#endif
case DT_FLAGS:
if (dynp->d_un.d_val & DF_ORIGIN)
@@ -1331,6 +1331,8 @@
break;
case PT_DYNAMIC:
+ if (ph->p_flags & PROT_WRITE)
+ obj->writable_dynamic = 1;
obj->dynamic = (const Elf_Dyn *)(ph->p_vaddr + obj->relocbase);
break;

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 23, 9:18 AM (7 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24087897
Default Alt Text
D4791.id11949.diff (1 KB)

Event Timeline