Thread (13 messages) 13 messages, 4 authors, 2017-04-12

Re: [RFC PATCH tip/master 2/3] kprobes: Allocate kretprobe instance if its free list is empty

From: Alban Crequy <hidden>
Date: 2017-03-30 13:03:23
Also in: lkml

On Thu, Mar 30, 2017 at 8:53 AM, Ingo Molnar [off-list ref] wrote:
* Masami Hiramatsu [off-list ref] wrote:
quoted
quoted
So this is something I missed while the original code was merged, but the concept
looks a bit weird: why do we do any "allocation" while a handler is executing?

That's fundamentally fragile. What's the maximum number of parallel
'kretprobe_instance' required per kretprobe - one per CPU?
It depends on the place where we put the probe. If the probed function will be
blocked (yield to other tasks), then we need a same number of threads on
the system which can invoke the function. So, ultimately, it is same
as function_graph tracer, we need it for each thread.
So then put it into task_struct (assuming there's no kretprobe-inside-kretprobe
nesting allowed). There's just no way in hell we should be calling any complex
kernel function from kernel probes!
Some kprobes are called from an interruption context. We have a kprobe
on tcp_set_state() and this is sometimes called when the network card
receives a packet.
I mean, think about it, a kretprobe can be installed in a lot of places, and now
we want to call get_free_pages() from it?? This would add a massive amount of
fragility.

Instrumentation must be _simple_, every patch that adds more complexity to the
most fundamental code path of it should raise a red flag ...

So let's make this more robust, ok?

Thanks,

        Ingo
Thanks,
Alban
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help