فهرست منبع

Patch from Bradley D. LaRonde:
ld.so mprotect rwx .dyanmic segment for mips DT_DEBUG
Allow writing debug_addr into the .dynamic segment.
Even though the program header is marked RWE, the kernel
gives it to us rx.

Eric Andersen 21 سال پیش
والد
کامیت
8525fd1b97
1فایلهای تغییر یافته به همراه9 افزوده شده و 4 حذف شده
  1. 9 4
      ldso/ldso/dl-startup.c

+ 9 - 4
ldso/ldso/dl-startup.c

@@ -377,13 +377,18 @@ found_got:
 					}
 					app_tpnt->dynamic_info[dpnt->d_tag] = dpnt->d_un.d_val;
 
-#warning "Debugging threads on mips won't work till someone fixes this..."
-#if 0
 					if (dpnt->d_tag == DT_DEBUG) {
+						/* Allow writing debug_addr into the .dynamic segment.
+						 * Even though the program header is marked RWE, the kernel gives
+						 * it to us rx.
+						 */
+						Elf32_Addr mpa = (ppnt->p_vaddr + app_tpnt->loadaddr) & ~(_dl_pagesize - 1);
+						if(_dl_mprotect(mpa, ppnt->p_memsz, PROT_READ | PROT_WRITE | PROT_EXEC)) {
+							SEND_STDERR("Couldn't mprotect .dynamic segment to rwx.\n");
+							_dl_exit(0);
+						}
 						dpnt->d_un.d_val = (unsigned long) debug_addr;
 					}
-#endif
-
 #else
 					if (dpnt->d_tag > DT_JMPREL) {
 						dpnt++;