Messages in this thread | | | Date | Fri, 03 Aug 2012 18:43:01 +0200 | From | Sebastian Andrzej Siewior <> | Subject | Re: [PATCH 2/2] ptrace: fix set_task_blockstep()->update_debugctlmsr() logic |
| |
On 08/03/2012 06:29 PM, Oleg Nesterov wrote: > diff --git a/arch/x86/kernel/step.c b/arch/x86/kernel/step.c > index afa60db..636402e 100644 > --- a/arch/x86/kernel/step.c > +++ b/arch/x86/kernel/step.c > @@ -166,12 +166,18 @@ static void set_task_blockstep(struct task_struct *task, bool on) > else > clear_tsk_thread_flag(task, TIF_BLOCKSTEP); > > + if (task != current) > + return; > + > + /* ensure irq/preemption can't change debugctl in between */ > + local_irq_disable(); > debugctl = get_debugctlmsr(); > if (on) > debugctl |= DEBUGCTLMSR_BTF; > else > debugctl&= ~DEBUGCTLMSR_BTF; > update_debugctlmsr(debugctl); > + local_irq_enable();
wouldn't preempt_disable() be enough?
> } > > /*
Sebastian
| |