On Sun, Sep 08, 2013 at 06:32:32PM +0200, Oleg Nesterov wrote: > Sorry for delay, vacation. > > On 09/03, Hemant Kumar Shaw wrote: > > > > There exists a limit to the number of nested return probes. The current > > limit is 64. > > However this limit is getting enforced on even non nested return probes. > > Hence, registering 64 independent non nested return probes results in > > failure of > > return probes on the same task. The problem is utask->depth is getting > > incremented > > unconditionally but decremented only if chained. > > Hmm. I'll try to recheck later, but at first glance this logic is indeed > wrong, thanks. > > > --- a/kernel/events/uprobes.c > > +++ b/kernel/events/uprobes.c > > @@ -1442,7 +1442,8 @@ static void prepare_uretprobe(struct uprobe *uprobe, > > struct pt_regs *regs) > > ri->orig_ret_vaddr = orig_ret_vaddr; > > ri->chained = chained; > > > > - utask->depth++; > > + if (chained) > > + utask->depth++; > > Not sure, but I can be easily wrong... afaics we need something like below, > no? > Anton?
Oleg, your guess is correct. My original intention was to limit by depth the chained only probes. But later, after your review, we've decided /based on safety concerns/ to limit it hard. The decrement 'utask->depth--;' in my own tree is above the 'if (!chained)' check. I think it got mangled somehow when I rebased the code before I sent it to lkml. Anton. > Oleg. > > --- x/kernel/events/uprobes.c > +++ x/kernel/events/uprobes.c > @@ -1682,12 +1682,10 @@ static bool handle_trampoline(struct pt_ > tmp = ri; > ri = ri->next; > kfree(tmp); > + utask->depth--; > > if (!chained) > break; > - > - utask->depth--; > - > BUG_ON(!ri); > } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/