lkml.org 
[lkml]   [2020]   [Apr]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC] kretprobe: Prevent triggering kretprobe from within kprobe_flush_task
    On Thu, Apr 09, 2020 at 02:32:21PM +0530, Naveen N. Rao wrote:

    SNIP

    > > ---
    > > kernel/kprobes.c | 6 ++++++
    > > 1 file changed, 6 insertions(+)
    > >
    > > diff --git a/kernel/kprobes.c b/kernel/kprobes.c
    > > index 2625c241ac00..b13247cae752 100644
    > > --- a/kernel/kprobes.c
    > > +++ b/kernel/kprobes.c
    > > @@ -1236,6 +1236,10 @@ __releases(hlist_lock)
    > > }
    > > NOKPROBE_SYMBOL(kretprobe_table_unlock);
    > > +static struct kprobe kretprobe_dummy = {
    > > + .addr = (void *)kretprobe_trampoline,
    > > +};
    > > +
    >
    > Perhaps a more meaningful name, say, kprobe_flush_task_protect ?

    ok, will rename together with Masami's changes

    >
    > > /*
    > > * This function is called from finish_task_switch when task tk becomes dead,
    > > * so that we can recycle any function-return probe instances associated
    > > @@ -1256,12 +1260,14 @@ void kprobe_flush_task(struct task_struct *tk)
    > > INIT_HLIST_HEAD(&empty_rp);
    > > hash = hash_ptr(tk, KPROBE_HASH_BITS);
    > > head = &kretprobe_inst_table[hash];
    > > + __this_cpu_write(current_kprobe, &kretprobe_dummy);
    > > kretprobe_table_lock(hash, &flags);
    > > hlist_for_each_entry_safe(ri, tmp, head, hlist) {
    > > if (ri->task == tk)
    > > recycle_rp_inst(ri, &empty_rp);
    > > }
    > > kretprobe_table_unlock(hash, &flags);
    > > + __this_cpu_write(current_kprobe, NULL);
    >
    > I would move this to the end of the function to also cover the below code.
    > kprobe_flush_task() is marked NOKPROBE, so it is good to prevent probe
    > handling in the below code too.

    ok, will do

    thanks,
    jirka

    >
    > > hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
    > > hlist_del(&ri->hlist);
    > > kfree(ri);
    >
    >
    > - Naveen
    >

    \
     
     \ /
      Last update: 2020-04-09 20:44    [W:4.319 / U:0.424 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site