Thread (2 messages) 2 messages, 1 author, 2016-12-22

A question about kprobe/kretprobe and kmalloc/kzalloc

From: zerons <hidden>
Date: 2016-12-22 02:30:59

Sorry, I thought I solved the problem. Using `kzalloc` doesn't work
all the time, I need to add `sleep(1)` in the test case after each
syscall, like

perf_event_open(...);
sleep(1);
ioctl(...);
sleep(1);
ioctl(...);
sleep(1);
read(...);

I have tried these:
1) with `sleep(1)`, both kprobe and kretprobe are enabled
2) without `sleep(1)`, both kprobe and kretprobe are enabled
3) without `sleep(1)`, disable pre_handler of kprobe
4) same as 1), after the first run, comment the `sleep(1)` lines,
	and run the test again

and 1) 3) 4) look fine,


On 12/21/2016 07:35 PM, zerons wrote:
Hi everyone.

I wrote a kernel module to test something. The module
uses kprobe and kretprobe, here is a bug I met today.

The pre_handler of kprobe, calls `do_something`. The probed
instructions are in the middle of a function.
The entry_handler of kretprobe, also calls `do_something`.
`do_something` calls `kmalloc`+`memset`.

Back to userspace, when I have all the functions probed,
then the test program cause a high CPU usage, and the
keyboard doesn't work. The system does not panic when
I set softlockup_panic=1.

If `do_something` is called by entry_handler of kretprobe,
the module works fine.
The bug happens when `do_something` called by the pre_handler
of kprobe.

So I use "#if 0" to locate the bug. It turns out to
be `kmalloc`+`memset`. When I change that to `kzalloc`,
problem solved.

Then I get confused.
`kzalloc` just calls `kmalloc` with a `__GFP_ZERO`.
Why the bug only happens when pre_handler of kprobe gets called?

Is it necessary to post the source code here? Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help