X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=kernel%2Fkprobes.c;h=7a86e64323385785bda6e838f01c9637e192844a;hb=1bad95c3bee183719e15eebffef66afc3fb3f8b0;hp=e3a5d817ac9b0f07b514587a7ec03453461ab655;hpb=92d15c2ccbb3e31a3fc71ad28fdb55e1319383c0;p=powerpc.git diff --git a/kernel/kprobes.c b/kernel/kprobes.c index e3a5d817ac..7a86e64323 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -699,6 +699,12 @@ static int __kprobes pre_handler_kretprobe(struct kprobe *p, struct kretprobe_instance, uflist); ri->rp = rp; ri->task = current; + + if (rp->entry_handler && rp->entry_handler(ri, regs)) { + spin_unlock_irqrestore(&kretprobe_lock, flags); + return 0; + } + arch_prepare_kretprobe(ri, regs); /* XXX(hch): why is there no hlist_move_head? */ @@ -745,7 +751,8 @@ int __kprobes register_kretprobe(struct kretprobe *rp) INIT_HLIST_HEAD(&rp->used_instances); INIT_HLIST_HEAD(&rp->free_instances); for (i = 0; i < rp->maxactive; i++) { - inst = kmalloc(sizeof(struct kretprobe_instance), GFP_KERNEL); + inst = kmalloc(sizeof(struct kretprobe_instance) + + rp->data_size, GFP_KERNEL); if (inst == NULL) { free_rp_inst(rp); return -ENOMEM; @@ -824,6 +831,8 @@ static int __init init_kprobes(void) if (!err) err = register_die_notifier(&kprobe_exceptions_nb); + if (!err) + init_test_probes(); return err; }