[Ltrace-devel] [patch] Fix segfault on ppc32 and ppc64

Thiago Jung Bauermann bauerman at br.ibm.com
Fri Apr 15 00:21:42 UTC 2011


Hi,

In ppc-linux and ppc64-linux, when calling ltrace with:

$ ltrace -e non-existent-function ./hello-world

ltrace segfaults. The reason is that in enable_all_breakpoints there's
some PowerPC specific code (guarded by #ifdef __powerpc__), which calls
sym2addr passing proc->list_of_symbols as argument. The problem is that
because we don't have any event to monitor, proc->list_of_symbols is
NULL and ppc's sym2addr will reference the null pointer.

To be honest, I'm not familiar with the ltrace source code and thus I
don't know if this patch is a fix or just a workaround. :-) There are no
changes in the testsuite results (for ppc-linux, I used Michael Edwards'
patch to fix the compilation errors). What do you think?

As an aside, even when I commented out all the code guarded by #if
__powerpc__, the testsuite results were unchanged, so I'm not sure that
it is even necessary. But I don't want to go down that rabbit hole at
this moment.
-- 
[]'s
Thiago Jung Bauermann
IBM Linux Technology Center


diff --git a/breakpoints.c b/breakpoints.c
index 1ea406a..7998b88 100644
--- a/breakpoints.c
+++ b/breakpoints.c
@@ -95,7 +95,7 @@ enable_all_breakpoints(Process *proc) {
 		 * If the dynamic linker hasn't populated the PLT then
 		 * dont enable the breakpoints
 		 */
-		if (options.libcalls) {
+		if (options.libcalls && proc->list_of_symbols) {
 			a = ptrace(PTRACE_PEEKTEXT, proc->pid,
 				   sym2addr(proc, proc->list_of_symbols),
 				   0);





More information about the Ltrace-devel mailing list