This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug kprobes/2568] New: KRetprobe on powerpc - Recursive post-handler - > fault-handler


Platform: PowerPC
Kernel: 2.6.16.5



If a kretprobe is registered without any assigned handlers for the embedded
kprobe, a recursive fault-handling loop is hit (See following printk output,
demonstrating the loop.  The last number is the line number in the source file,
and the arrows indicate whether the printk is just before or just after the line
number mentioned:

[1986711.732589] <<< arch/powerpc/kernel/kprobes.c: 338  [Entered pre-handler code]
[1986711.732600]  >>> arch/powerpc/kernel/kprobes.c: 339
[1986711.732610] <<< arch/powerpc/kernel/kprobes.c: 339
[1986711.732621]  >>> arch/powerpc/kernel/kprobes.c: 346
[1986711.732633] <<< arch/powerpc/kernel/kprobes.c: 374 [fault handler code]
[1986711.732643]  >>> arch/powerpc/kernel/kprobes.c: 375
[1986711.732654] <<< arch/powerpc/kernel/kprobes.c: 375
[1986711.732665] <<< arch/powerpc/kernel/kprobes.c: 374
[1986711.732675]  >>> arch/powerpc/kernel/kprobes.c: 375
[1986711.732685] <<< arch/powerpc/kernel/kprobes.c: 375
[1986711.732697] <<< arch/powerpc/kernel/kprobes.c: 374
[1986711.732707]  >>> arch/powerpc/kernel/kprobes.c: 375

......
....
....

After assigning NULL to each of the kprobe handlers, this recursive loop was
avoided.

        retp_p->kp.pre_handler = (kprobe_pre_handler_t)NULL;
	retp_p->kp.post_handler = (kprobe_post_handler_t)NULL;
	retp_p->kp.fault_handler = (kprobe_fault_handler_t)NULL;

New trace:

[2005723.931159] <<< arch/powerpc/kernel/kprobes.c: 338 [Pre-handler]
[2005723.931169]  >>> arch/powerpc/kernel/kprobes.c: 339
[2005723.931179] <<< arch/powerpc/kernel/kprobes.c: 339
           [Fault handler never hit]
[2005723.931190] <<< arch/powerpc/kernel/kprobes.c: 327
[2005723.931201]  >>> arch/powerpc/kernel/kprobes.c: 328
[2005723.931211] <<< arch/powerpc/kernel/kprobes.c: 328
[2005723.931221] <<< arch/powerpc/kernel/kprobes.c: 330
[2005723.931232]  >>> arch/powerpc/kernel/kprobes.c: 331
[2005723.931243] <<< arch/powerpc/kernel/kprobes.c: 331
[2005723.931253] <<< arch/powerpc/kernel/kprobes.c: 349
[2005723.931264]  >>> arch/powerpc/kernel/kprobes.c: 350
[2005723.931274] <<< arch/powerpc/kernel/kprobes.c: 350
[2005723.931284] <<< arch/powerpc/kernel/kprobes.c: 357
[2005723.931295] <<< arch/powerpc/kernel/kprobes.c: 359
[2005723.931305]  >>> arch/powerpc/kernel/kprobes.c: 408
[2005723.931498] <<< arch/powerpc/kernel/kprobes.c: 145
[2005723.931509]  >>> arch/powerpc/kernel/kprobes.c: 146
[2005723.931519] <<< arch/powerpc/kernel/kprobes.c: 146
[2005723.931530]  >>> arch/powerpc/kernel/kprobes.c: 147
[2005723.931540] <<< arch/powerpc/kernel/kprobes.c: 147
[2005723.931550]  >>> arch/powerpc/kernel/kprobes.c: 148
[2005723.931560] <<< arch/powerpc/kernel/kprobes.c: 148
[2005723.931570] <<< arch/powerpc/kernel/kprobes.c: 154
[2005723.931581]  >>> arch/powerpc/kernel/kprobes.c: 155
[2005723.931591] <<< arch/powerpc/kernel/kprobes.c: 155
[2005723.931601] <<< kernel/kprobes.c: 176
[2005723.931609]  >>> kernel/kprobes.c: 177
[2005723.931618] <<< kernel/kprobes.c: 177
[2005723.931627]  >>> kernel/kprobes.c: 178
[2005723.931635] <<< kernel/kprobes.c: 178
[2005723.931645] <<< arch/powerpc/kernel/kprobes.c: 226
[2005723.931655]  >>> arch/powerpc/kernel/kprobes.c: 227
[2005723.931666] <<< arch/powerpc/kernel/kprobes.c: 120
[2005723.931676]  >>> arch/powerpc/kernel/kprobes.c: 121
[2005723.931687] <<< arch/powerpc/kernel/kprobes.c: 121
[2005723.931697] <<< arch/powerpc/kernel/kprobes.c: 227
[2005723.931707] <<< arch/powerpc/kernel/kprobes.c: 260
[2005723.931717]  >>> arch/powerpc/kernel/kprobes.c: 261
[2005723.931728] <<< arch/powerpc/kernel/kprobes.c: 261
[2005723.931739]  >>> arch/powerpc/kernel/kprobes.c: 262
[2005723.931749] <<< arch/powerpc/kernel/kprobes.c: 262
[2005723.931760]  >>> arch/powerpc/kernel/kprobes.c: 263
[2005723.931770] <<< arch/powerpc/kernel/kprobes.c: 263
[2005723.931781]  >>> arch/powerpc/kernel/kprobes.c: 264
[2005723.931791] <<< arch/powerpc/kernel/kprobes.c: 264
[2005723.931801] <<< arch/powerpc/kernel/kprobes.c: 266
[2005723.931812]  >>> arch/powerpc/kernel/kprobes.c: 267
[2005723.931823] <<< arch/powerpc/kernel/kprobes.c: 267
[2005723.931833] <<< arch/powerpc/kernel/kprobes.c: 285
[2005723.931844]  *****  Entered kretprobe handler
[2005723.931856] Ret handler hit :0 times.  0 times in time interval
[2005723.931867] Leaving KRetProbe Handler<0><<< arch/powerpc/kernel/kprobes.c: 290


Most likely cause is the post-handler is not being set to NULL by kprobes, when
called, it attempts to access a junk memory address, which then leads to the
fault-handler.  This then attempts another invalid memory access, which loops
back to itself.

-- 
           Summary: KRetprobe on powerpc - Recursive post-handler - > fault-
                    handler
           Product: systemtap
           Version: unspecified
            Status: NEW
          Severity: minor
          Priority: P2
         Component: kprobes
        AssignedTo: systemtap at sources dot redhat dot com
        ReportedBy: bpeters at us dot ibm dot com


http://sourceware.org/bugzilla/show_bug.cgi?id=2568

------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]