Hi, I am trying to use a kprobe module on an android platform( linux + arm ). Even if this has no connection with my problem i've thought that i should mention that I've disabled the FTRACE support and enabled KPROBES( the proprietary drivers wont work with both FTRACE and KPROBES). When i am trying to insert my module, i get an oops. The source of it is the next line of code: *p->addr = KPROBE_BREAKPOINT_INSTRUCTION; from the function arch_arm_kprobe ( arch/arm/kernel/kprobes.c ). I suspect the reason for the oops is that the memory region is in kernel text region and is marked as read only. When trying to add the breakpoint a memory protection violation rises. In order to test if this is the issue, i've added the next lines of code in arch_arm_kprobe: struct mm_struct *mm = current->mm; unsigned long addr = (unsigned long)p->addr; pgd_t *pgd; pmd_t *pmd; pte_t *pte; spinlock_t *ptl; printk(KERN_ALERT "HERE kprobe&=[%p] p->addr = [%p]",p,p->addr); down_read(&mm->mmap_sem); pgd = pgd_offset(mm, addr); if (!pgd_present(*pgd)) { printk(KERN_ALERT "BAD pgd [%p]",pgd); up_read(&mm->mmap_sem); return; } pmd = pmd_offset(pgd, addr); if (!pmd_present(*pmd)) { printk(KERN_ALERT "BAD pmd [%p]",pmd); up_read(&mm->mmap_sem); return; } pte = pte_offset_map_lock(mm, pmd, addr, &ptl); printk( KERN_ALERT "PTE=[%p]",pte); if( !pte_present(*pte) ) { printk( KERN_ALERT "NOT PRESENT"); pte_unmap_unlock(pte, ptl); up_read(&mm->mmap_sem); return; } if( !pte_write(*pte) ) { printk( KERN_ALERT "Is not Write"); pte_unmap_unlock(pte, ptl); up_read(&mm->mmap_sem); return; } pte_unmap_unlock(pte, ptl); up_read(&mm->mmap_sem); *p->addr = KPROBE_BREAKPOINT_INSTRUCTION; The branch !pte_write(*pte) was not taken. What i should try next? <1>[ 18.699348] HERE kprobe&=[bf0005a4] p->addr = [c0237524] <1>[ 18.699357] PTE=[c02198dc] <1>[ 18.699370] Unable to handle kernel paging request at virtual address c0237524 <1>[ 18.699380] pgd = d52b8000 <1>[ 18.699387] [c0237524] *pgd=4041940e(bad) <0>[ 18.699402] Internal error: Oops: 80d [#1] PREEMPT SMP <0>[ 18.703496] last sysfs file: /sys/devices/system/cpu/cpu0/rq-stats/def_timer_ms <4>[ 18.710788] Modules linked in: VMXProber(+) <4>[ 18.714957] CPU: 0 Not tainted (2.6.35.11-perf #9) <4>[ 18.720086] PC is at arch_arm_kprobe+0x15c/0x1ac <4>[ 18.724679] LR is at arch_arm_kprobe+0x150/0x1ac <4>[ 18.729281] pc : [<c0738754>] lr : [<c0738748>] psr: 00000013 <4>[ 18.729286] sp : d52b1ed0 ip : 0000731e fp : bedfb860 <4>[ 18.740736] r10: 00000001 r9 : d52b0000 r8 : d6ba5d74 <4>[ 18.745944] r7 : 00000080 r6 : d6ba5d84 r5 : bf0005a4 r4 : d52b0000 <4>[ 18.752456] r3 : c0237524 r2 : e7f001f8 r1 : 00000000 r0 : c083cce1 <4>[ 18.758966] Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user <4>[ 18.766084] Control: 10c57c7d Table: 554b806a DAC: 00000015 <4>[ 18.771813] <4>[ 18.771815] PC: 0xc07386d4: <4>[ 18.776065] 86d4 ebffefa1 f57ff05f e5867000 f57ff04f e320f004 e5943004 e2433001 e5843004 <4>[ 18.784224] 86f4 e5943000 e3130002 0a000000 ebfff20c e1a00008 e8bd47f0 eaea3e40 f57ff05f <4>[ 18.792384] 8714 e3a03000 e5863000 f57ff04f e320f004 e5943004 e2433001 e5843004 e5943000 <4>[ 18.800544] 8734 e3130002 0a000000 ebfff1fd e1a00008 ebea3e32 e5953014 e59f2040 e59f0040 <4>[ 18.808703] 8754 e5832000 ebffef80 e5950014 e59f3034 e2801004 e1a0e00f e593f00c e59f0028 <4>[ 18.816863] 8774 e8bd47f0 eaffef78 c083cc82 c083cca6 7fe00800 c083ccb6 c083ccc2 c083ccd1 <4>[ 18.825024] 8794 e7f001f8 c083cce1 c0bbcf28 c083cceb e92d4013 e5903014 e1a04000 e3130003 <4>[ 18.833183] 87b4 1a000016 e59f2098 e1530002 3a000015 e59f2090 e1530002 3a000010 ea000011 <4>[ 18.841343] <4>[ 18.841346] LR: 0xc07386c8: <4>[ 18.845595] 86c8 e2177080 1a00000f e59f00b8 ebffefa1 f57ff05f e5867000 f57ff04f e320f004 <4>[ 18.853755] 86e8 e5943004 e2433001 e5843004 e5943000 e3130002 0a000000 ebfff20c e1a00008 <4>[ 18.861915] 8708 e8bd47f0 eaea3e40 f57ff05f e3a03000 e5863000 f57ff04f e320f004 e5943004 <4>[ 18.870075] 8728 e2433001 e5843004 e5943000 e3130002 0a000000 ebfff1fd e1a00008 ebea3e32 <4>[ 18.878235] 8748 e5953014 e59f2040 e59f0040 e5832000 ebffef80 e5950014 e59f3034 e2801004 <4>[ 18.886395] 8768 e1a0e00f e593f00c e59f0028 e8bd47f0 eaffef78 c083cc82 c083cca6 7fe00800 <4>[ 18.894555] 8788 c083ccb6 c083ccc2 c083ccd1 e7f001f8 c083cce1 c0bbcf28 c083cceb e92d4013 <4>[ 18.902714] 87a8 e5903014 e1a04000 e3130003 1a000016 e59f2098 e1530002 3a000015 e59f2090 <4>[ 18.910874] <4>[ 18.910877] SP: 0xd52b1e50: <4>[ 18.915127] 1e50 ce07ea68 2020205b 362e3831 35333939 00205d37 000006df d52b0000 da9cd7a0 <4>[ 18.923287] 1e70 bedfb860 ffffffff d52b1ebc d6ba5d84 00000080 c073792c c083cce1 00000000 <4>[ 18.931447] 1e90 e7f001f8 c0237524 d52b0000 bf0005a4 d6ba5d84 00000080 d6ba5d74 d52b0000 <4>[ 18.939606] 1eb0 00000001 bedfb860 0000731e d52b1ed0 c0738748 c0738754 00000013 ffffffff <4>[ 18.947766] 1ed0 00000000 bf0005a4 00000000 00000000 bf0005ac d52b0000 00000000 c073b5cc <4>[ 18.955926] 1ef0 bf0005a4 00000000 d52b1f34 c07380e0 c07381c8 d52b0000 00000001 c073b874 <4>[ 18.964085] 1f10 bf000548 00000000 00000000 000251dc c0100e28 d52b0000 00000000 c073b8c8 <4>[ 18.972245] 1f30 bf0005a4 bf0005a4 d52b1f34 bf003048 bf003000 00000000 d52b0000 bf003000 <4>[ 18.980406] <4>[ 18.980408] R0: 0xc083cc61: <4>[ 18.984658] cc60 65747369 000a7372 68637261 6d72612f 72656b2f 2f6c656e 6f72706b 2e736562 <4>[ 18.992817] cc80 313c0063 5245483e 706b2045 65626f72 255b3d26 70205d70 64613e2d 3d207264 <4>[ 19.000979] cca0 70255b20 313c005d 4441423e 646d7020 70255b20 313c005d 4554503e 70255b3d <4>[ 19.009137] ccc0 313c005d 544f4e3e 45525020 544e4553 3e313c00 6e207349 5720746f 65746972 <4>[ 19.017298] cce0 3e313c00 45524548 3c003220 45483e31 33204552 3e373c00 69776e75 203a646e <4>[ 19.025457] cd00 204d5241 63617473 6e75206b 646e6977 20676e69 74696e69 696c6169 0a646573 <4>[ 19.033617] cd20 3e343c00 69776e75 203a646e 6e6b6e55 206e776f 626d7973 61206c6f 65726464 <4>[ 19.041777] cd40 25207373 786c3830 373c000a 2873253e 6c383025 25202c78 25202c70 000a2970 <4>[ 19.049936] cd60 753e343c 6e69776e 43203a64 7572726f 75207470 6e69776e 61742064 0a656c62 <4>[ 19.058096] <4>[ 19.058098] R2: 0xe7f00178: <4>[ 19.062350] 0178 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.070508] 0198 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.078668] 01b8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.086828] 01d8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.094988] 01f8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.103148] 0218 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.111308] 0238 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.119468] 0258 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.127627] <4>[ 19.127630] R3: 0xc02374a4: <4>[ 19.131880] 74a4 e1a00006 e59670d4 e1a01007 ebfdb975 e3570000 1affff68 eaffff71 e1a0300d <4>[ 19.140040] 74c4 e3a05000 e3c34d7f e5885088 e3c4403f e594300c e593200c e3c22501 e583200c <4>[ 19.148200] 74e4 ebfb2b52 e594300c e59810a4 e1a00005 e59320ec e1c22001 e58320ec eaffffca <4>[ 19.156360] 7504 c0b02020 c086d39d 00200200 c0ff0f30 c102c814 c003e9ec c0b1f6f0 c0b666c0 <4>[ 19.164519] 7524 e92d41f0 e1a0300d e3c34d7f e1a05000 e3c4403f e1a08001 e5943004 e2833001 <4>[ 19.172679] 7544 e5843004 e3a03001 e2806d0a e1962f9f e3320000 1320f002 01862f93 03320000 <4>[ 19.180838] 7564 1afffff9 f57ff05f e2807f7a e3a01010 e1a00007 eb051e80 f57ff04f e3a02010 <4>[ 19.188999] 7584 e1a00007 e1a01008 eb053b14 f57ff05f e3a03000 e5863000 f57ff04f e320f004 <4>[ 19.197158] <4>[ 19.197161] R4: 0xd52aff80: <4>[ 19.201411] ff80 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.209572] ffa0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.217731] ffc0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.225891] ffe0 00000000 00000000 00000000 00000000 58ce75df 5838551f 00000000 00000000 <4>[ 19.234050] 0000 00000000 00000002 00000000 dfa39040 c0b6342c 00000000 00000017 ce0800c0 <4>[ 19.242210] 0020 d52b0000 dfa39040 dfc7d860 d6ba5d40 dfb29380 00000000 d52b1e3c d52b1df0 <4>[ 19.250370] 0040 c0734bec 00000000 00000000 00000000 00000000 00000000 01000000 00000000 <4>[ 19.258529] 0060 afd4d49c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.266690] <4>[ 19.266693] R6: 0xd6ba5d04: <4>[ 19.270944] 5d04 55555555 55555555 55555555 55555555 55555551 55555555 55555155 55555555 <4>[ 19.279102] 5d24 55555555 55555555 55555555 55555555 55555555 55555555 55555555 d5298dc0 <4>[ 19.287263] 5d44 d5298b74 da91ab00 c010c8e0 c021b694 40000000 bf000000 00000000 4002f000 <4>[ 19.295422] 5d64 d52b8000 00000001 00000001 00000016 00000000 00000000 d6ba5d7c d6ba5d7c <4>[ 19.303582] 5d84 00000000 d6ba5d88 d6ba5d88 0000003f 000000df 00000106 00000000 00000093 <4>[ 19.311742] 5da4 00000082 00000022 00000000 00000000 00000007 00008000 0001a9d4 0001b000 <4>[ 19.319902] 5dc4 0001b938 00021000 00021000 bedfbcc0 bedfbdb1 bedfbdd0 bedfbdd0 bedfbfe9 <4>[ 19.328061] 5de4 00000010 000030d7 00000006 00001000 00000011 00000064 00000003 00008034 <4>[ 19.336221] <4>[ 19.336224] R8: 0xd6ba5cf4: <4>[ 19.340474] 5cf4 55555551 55555555 55555555 55555555 55555555 55555555 55555555 55555555 <4>[ 19.348634] 5d14 55555551 55555555 55555155 55555555 55555555 55555555 55555555 55555555 <4>[ 19.356793] 5d34 55555555 55555555 55555555 d5298dc0 d5298b74 da91ab00 c010c8e0 c021b694 <4>[ 19.364953] 5d54 40000000 bf000000 00000000 4002f000 d52b8000 00000001 00000001 00000016 <4>[ 19.373114] 5d74 00000000 00000000 d6ba5d7c d6ba5d7c 00000000 d6ba5d88 d6ba5d88 0000003f <4>[ 19.381273] 5d94 000000df 00000106 00000000 00000093 00000082 00000022 00000000 00000000 <4>[ 19.389432] 5db4 00000007 00008000 0001a9d4 0001b000 0001b938 00021000 00021000 bedfbcc0 <4>[ 19.397592] 5dd4 bedfbdb1 bedfbdd0 bedfbdd0 bedfbfe9 00000010 000030d7 00000006 00001000 <4>[ 19.405752] <4>[ 19.405755] R9: 0xd52aff80: <4>[ 19.410006] ff80 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.418165] ffa0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.426324] ffc0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[ 19.434484] ffe0 00000000 00000000 00000000 00000000 58ce75df 5838551f 00000000 00000000 <4>[ 19.442644] 0000 00000000 00000002 00000000 dfa39040 c0b6342c 00000000 00000017 ce0800c0 <4>[ 19.450804] 0020 d52b0000 dfa39040 dfc7d860 d6ba5d40 dfb29380 00000000 d52b1e3c d52b1df0 <4>[ 19.458964] 0040 c0734bec 00000000 00000000 00000000 00000000 00000000 01000000 00000000 <4>[ 19.467124] 0060 afd4d49c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <0>[ 19.475286] Process insmod (pid: 590, stack limit = 0xd52b02f0) <0>[ 19.481188] Stack: (0xd52b1ed0 to 0xd52b2000) <0>[ 19.485530] 1ec0: 00000000 bf0005a4 00000000 00000000 <0>[ 19.493691] 1ee0: bf0005ac d52b0000 00000000 c073b5cc bf0005a4 00000000 d52b1f34 c07380e0 <0>[ 19.501851] 1f00: c07381c8 d52b0000 00000001 c073b874 bf000548 00000000 00000000 000251dc <0>[ 19.510011] 1f20: c0100e28 d52b0000 00000000 c073b8c8 bf0005a4 bf0005a4 d52b1f34 bf003048 <0>[ 19.518170] 1f40: bf003000 00000000 d52b0000 bf003000 00000000 c01006c8 00000000 00000001 <0>[ 19.526330] 1f60: bf0006e8 00000000 bedfb85c bf0006e8 00000000 bedfb85c 000251dc c0100e28 <0>[ 19.534490] 1f80: d52b0000 c01dc998 40009008 000251dc bedfb85c 0001b6dc bedfb85c 00000000 <0>[ 19.542650] 1fa0: 00000080 c0100c80 0001b6dc bedfb85c 40009008 000251dc bedfb85c 00000001 <0>[ 19.550810] 1fc0: 0001b6dc bedfb85c 00000000 00000080 bedfbdb1 00000002 40009008 bedfb860 <0>[ 19.558970] 1fe0: 0001b7c0 bedfb840 0000bf8d afd0c4fc a0000010 40009008 9eeaaaa2 a82aaaaa <4>[ 19.567141] [<c0738754>] (arch_arm_kprobe+0x15c/0x1ac) from [<c073b5cc>] (register_kprobe+0x50c/0x5ac) <4>[ 19.576420] [<c073b5cc>] (register_kprobe+0x50c/0x5ac) from [<c073b874>] (register_jprobes+0x4c/0x88) <4>[ 19.585622] [<c073b874>] (register_jprobes+0x4c/0x88) from [<c073b8c8>] (register_jprobe+0x18/0x1c) <4>[ 19.594656] [<c073b8c8>] (register_jprobe+0x18/0x1c) from [<bf003048>] (prober_module_init+0x48/0x1bc [VMXProber]) <4>[ 19.604986] [<bf003048>] (prober_module_init+0x48/0x1bc [VMXProber]) from [<c01006c8>] (do_one_initcall+0x5c/0x1b8) <4>[ 19.615403] [<c01006c8>] (do_one_initcall+0x5c/0x1b8) from [<c01dc998>] (sys_init_module+0x90/0x1ac) <4>[ 19.624511] [<c01dc998>] (sys_init_module+0x90/0x1ac) from [<c0100c80>] (ret_fast_syscall+0x0/0x30) <0>[ 19.633536] Code: ebea3e32 e5953014 e59f2040 e59f0040 (e5832000) Any ideas how to debug/solve this issue would be great. Thank you, Sorin PS: For a moment i thought that maybe i was trying to access a swapped page while holding a lock, but that memory region is in kernel text region so it should not be swapped. PPS: I don't know if i provided enough informations. If it's the case, please let me know what else i should specify. Thanks again
Hi Sorin.... On Wed, Jan 4, 2012 at 18:27, Sorin Baltateanu <baltateanu.sorin@gmail.com> wrote:
<1>[ 18.699348] HERE kprobe&=[bf0005a4] p->addr = [c0237524] <1>[ 18.699357] PTE=[c02198dc] <1>[ 18.699370] Unable to handle kernel paging request at virtual address c0237524
It would be great if you could post your kernel module which uses kprobes. BTW, I am not into ARM, but the error message above AFAIK suggest that it might hit "un-allocated" memory area. This is just my way to express a situation where a memory area hasn't been represented by PTE. Or in other word, you haven't allocated page(s) for that area but you hit it. So, any suspects related to the above hypothesis? -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com
participants (2)
-
Mulyadi Santosa -
Sorin Baltateanu