Messages in this thread Patch in this message |  | | | Date | Sat, 8 Sep 2012 19:06:01 +0200 | | From | Oleg Nesterov <> | | Subject | Re: [PATCH 0/7] uprobes: single-step fixes |
| |
On 09/03, Oleg Nesterov wrote: > > Sebastian, I changed your patches a bit: > > 1/7: > > - Change the subject and update the changelog. In particular, > s/utrace/uprobes/. I am wondering where this typo came from ;)
Hmm. I just noticed this patch is buggy. arch_uprobe_disable_step(&uprobe->arch) is not safe after put_uprobe().
Srikar, I fixed this in my tree with the following change,
--- kernel/events/uprobes.c~ 2012-09-02 16:52:54.000000000 +0200 +++ kernel/events/uprobes.c 2012-09-08 18:56:44.000000000 +0200 @@ -1536,10 +1536,10 @@ static void handle_singlestep(struct upr else WARN_ON_ONCE(1); + arch_uprobe_disable_step(&uprobe->arch); put_uprobe(uprobe); utask->active_uprobe = NULL; utask->state = UTASK_RUNNING; - arch_uprobe_disable_step(&uprobe->arch); xol_free_insn_slot(current); spin_lock_irq(¤t->sighand->siglock);
I hope your ack is still valid.
And this also allows us to rely on utask->state in disable_step(), see the new 8/7 I'll send in a minute. I was going to fix this later, but I just realized that "disable if trapped" is more buggy than I thought.
Assuming that you are agree with 6 and 8. I'd prefer the new one as a separate change, but if you prefer to join them please let me know.
Oleg.
|  |