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]

Re: kprobes + nptl01(test in ltp testsuite) problem


Hi Srinivas,

 Please find the attached kernel module that ive used for this
test.

- Manjunath

On 7/24/07, Srinivasa Ds <srinivasa@in.ibm.com> wrote:
manjunath k wrote:
> Hi,
>
> Ive been using kprobes on X86 machine. when a probe is
> put on the sys_gettimeofday with the fault handler and the LTP
> testcase nptl01is executed the system is getting into an infintie
> loop.

I tried to recreate this problem on local system with latest 2.6.23-rc1
kernel, but I failed. May I know which kernel are you using??
=======================================
[root@llm27lp1 bin]# ./nptl01
nptl01      0  INFO  :  Starting test, please wait.
nptl01      0  INFO  :  Success thru loop 1 of 100000
nptl01      0  INFO  :  Success thru loop 2 of 100000
nptl01      0  INFO  :  Success thru loop 3 of 100000
nptl01      0  INFO  :  Success thru loop 4 of 100000
nptl01      0  INFO  :  Success thru loop 5 of 100000
nptl01      0  INFO  :  Success thru loop 6 of 100000
nptl01      0  INFO  :  Success thru loop 7 of 100000
nptl01      0  INFO  :  Success thru loop 8 of 100000
nptl01      0  INFO  :  Success thru loop 9 of 100000
nptl01      1  PASS  :  Test completed successfully!
=====================================================
[root@llm27lp1 ~]# cat /sys/kernel/debug/kprobes/list
c00000000002a7dc  k  .kretprobe_trampoline_holder+0x0
c000000000015740  k  .compat_sys_gettimeofday+0x0
c000000000073404  k  .sys_gettimeofday+0x0
=====================================================

>
> Please give me some information regarding this problem.
>
>
> -Manjunath


{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}} \viewkind4\uc1\pard\f0\fs20 #include <linux/module.h>\par #include <linux/init.h>\par #include <linux/kprobes.h>\par #include <linux/kallsyms.h>\par #include <linux/utsname.h>\par #include <asm/uaccess.h>\par \par static struct kprobe k_004_kpr;\par \par #include <asm/uaccess.h>\par \par void show_allregs(struct pt_regs * regs)\par \{\par unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;\par \par printk("\\n");\par printk("Pid: %d, comm: %20s\\n", current->pid, current->comm);\par printk("EIP: %04x:[<%08lx>] CPU: %d\\n",0xffff & regs->xcs,regs->eip,\par smp_processor_id());\par print_symbol("EIP is at %s\\n", regs->eip);\par \par if (user_mode(regs))\par printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);\par /*\par printk(" EFLAGS: %08lx (%s %.*s)\\n",\par regs->eflags, system_utsname.release,\par (int)strcspn(system_utsname.version, " "),\par system_utsname.version);\par */\par \par printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\\n",\par regs->eax,regs->ebx,regs->ecx,regs->edx);\par printk("ESI: %08lx EDI: %08lx EBP: %08lx",\par regs->esi, regs->edi, regs->ebp);\par printk(" DS: %04x ES: %04x\\n",\par 0xffff & regs->xds,0xffff & regs->xes);\par \par cr0 = read_cr0();\par cr2 = read_cr2();\par cr3 = read_cr3();\par cr4 = read_cr4_safe();\par printk("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\\n", cr0, cr2, cr3, cr4);\par \}\par \par void k_004_CPY_FROM_USER(struct file *file, char *buf, int len)\par \{\par \par char x = 'a';\par \par if (put_user(x, buf)) \{\par printk("put_user : -EFAULT\\n");\par \}\par \par printk("CPY_FROM_USER\\n");\par \}\par \par static void __exit k_004_exit_probe(void)\par \{\par printk("\\nModule exiting from sys_gettimeofday \\n");\par unregister_kprobe(&k_004_kpr);\par \}\par \par static int k_004_before_hook(struct kprobe *k_004_kpr, struct pt_regs *p)\par \{\par int len = 500;\par struct file *file = NULL;\par \par printk("\\nBefore hook in sys_gettimeofday");\par printk("\\nThis is the Kprobe pre \\n"\par "handler for instruction at" "%p\\n", k_004_kpr->addr);\par printk("Stack Dump:\\n");\par dump_stack();\par show_allregs(p);\par printk("The Registers are:\\n");\par k_004_CPY_FROM_USER(file, NULL, len);\par return 0;\par \}\par \par static int k_004_after_hook(struct kprobe *k_004_kpr,\par struct pt_regs *p, unsigned long flags)\par \{\par printk("\\nAfter hook in sys_gettimeofday");\par printk("\\nThis is the Kprobe post \\n"\par "handler for instruction at" " %p\\n", k_004_kpr->addr);\par printk("Stack Dump:\\n");\par dump_stack();\par show_allregs(p);\par printk("The Registers are:\\n");\par return 0;\par \}\par \par int k_004_fault_probe(struct kprobe *p, struct pt_regs *regs, int trapnr)\par \{\par printk("\\nThis is the Kprobe fault \\n"\par "handler for sys_gettimeodday\\n");\par printk("fault_handler:p->addr=0x%p\\n", p->addr);\par printk("Stack Dump:\\n");\par dump_stack();\par show_allregs(regs);\par printk("The Registers are:\\n");\par return 0;\par \}\par \par static int __init k_004_init_probe(void)\par \{\par printk("\\nInserting the kprobes for sys_gettimeofday\\n");\par \par /* Registering a kprobe */\par k_004_kpr.pre_handler = (kprobe_pre_handler_t) k_004_before_hook;\par k_004_kpr.post_handler = (kprobe_post_handler_t) k_004_after_hook;\par k_004_kpr.fault_handler = (kprobe_fault_handler_t) k_004_fault_probe;\par #if 0\par k_004_kpr.addr =\par (kprobe_opcode_t *) kallsyms_lookup_name("sys_gettimeofday");\par if (k_004_kpr.addr == NULL) \{\par printk("kallsyms_lookup_name could not find address "\par "for the specified symbol name\\n");\par return 1;\par \}\par #endif\par k_004_kpr.symbol_name = "sys_gettimeofday";\par if( register_kprobe(&k_004_kpr) <0 ) \{\par printk("k-004.c: register_kprobe is failed\\n");\par return -1;\par \}\par \par printk("register_kprobe is successful\\n");\par printk("\\nAddress where the kprobe is \\n"\par "going to be inserted - %p\\n", k_004_kpr.addr);\par register_kprobe(&k_004_kpr);\par return 0;\par \}\par \par module_init(k_004_init_probe);\par module_exit(k_004_exit_probe);\par \par MODULE_DESCRIPTION("Kprobes test module");\par MODULE_LICENSE("GPL");\par }
Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]