Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137947014
D18364.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D18364.diff
View Options
Index: head/lib/libc/gen/elf_utils.c
===================================================================
--- head/lib/libc/gen/elf_utils.c
+++ head/lib/libc/gen/elf_utils.c
@@ -47,8 +47,21 @@
for (i = 0; i < phdr_info->dlpi_phnum; i++) {
ph = &phdr_info->dlpi_phdr[i];
- if (ph->p_type != PT_LOAD || (ph->p_flags & PF_X) == 0)
+ if (ph->p_type != PT_LOAD)
continue;
+
+ /* ELFv1 ABI for powerpc64 passes function descriptor
+ * pointers around, not function pointers. The function
+ * descriptors live in .opd, which is a non-executable segment.
+ * The PF_X check would therefore make all address checks fail,
+ * causing a crash in some instances. Don't skip over
+ * non-executable segments in the ELFv1 powerpc64 case.
+ */
+#if !defined(__powerpc64__) || (defined(_CALL_ELF) && _CALL_ELF == 2)
+ if ((ph->p_flags & PF_X) == 0)
+ continue;
+#endif
+
if (phdr_info->dlpi_addr + ph->p_vaddr <= (uintptr_t)addr &&
(uintptr_t)addr + sizeof(addr) < phdr_info->dlpi_addr +
ph->p_vaddr + ph->p_memsz)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 28, 1:49 PM (11 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26285410
Default Alt Text
D18364.diff (1 KB)
Attached To
Mode
D18364: Fix PowerPC64 ELFv1-specific problem in __elf_phdr_match_addr() leading to crash in threaded programs that unload libraries.
Attached
Detach File
Event Timeline
Log In to Comment