lkml.org 
[lkml]   [2012]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/2] ptrace: fix set_task_blockstep()->update_debugctlmsr() logic
    On 08/03/2012 06:29 PM, Oleg Nesterov wrote:
    > --- 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();
    > }

    I would say that you can remove this chunk. For task != current we
    leave.
    For uprobes we never set the bit, we only need it cleared. We get here
    via int 3 and do_debug() already clears TIF_BLOCKSTEP because the
    CPU clears the bit in CPU. So both, TIF_BLOCKSTEP and DEBUGCTLMSR_BTF
    are never set.

    Sebastian


    \
     
     \ /
      Last update: 2012-08-07 12:21    [W:4.429 / U:23.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site