Messages in this thread | | | Date | Wed, 01 Aug 2012 16:21:16 +0200 | From | Sebastian Andrzej Siewior <> | Subject | Re: Q: user_enable_single_step() && update_debugctlmsr() |
| |
On 08/01/2012 04:01 PM, Oleg Nesterov wrote: > On 08/01, Sebastian Andrzej Siewior wrote: >> >> On 08/01/2012 03:46 PM, Oleg Nesterov wrote: >> >>>>> But, worse, isn't it wrong? Suppose that debugger switches to >>>>> another TIF_SINGLESTEP&& !TIF_BLOCKSTEP task, in this case >>>>> we "leak" DEBUGCTLMSR_BTF, no? >>>> >>>> __switch_to_xtra() should notice the difference in the TIF_BLOCKSTEP >>>> flag and disable it. >>> >>> And how it can notice the difference if there is no difference? >>> >>> (unless, of course debugger is TIF_BLOCKSTEP'ed). >> >> Yes. enable_step() sets DEBUGCTLMSR_BTF along with TIF_BLOCKSTEP. >> kprobes checks the same flag before touching DEBUGCTLMSR_BTF. > > It seems that you replied to the wrong email or I am confused ;)
No I think I replied to the correct one :) enable_step() is the only place for ptrace/debugger which is touching DEBUGCTLMSR_BTF. It always sets DEBUGCTLMSR_BTF and TIF_BLOCKSTEP in sync so why should they both end up different? And once __switch_to_extra() notices that TIF_BLOCKSTEP from the previous task is different from the next task is different, then the CPU flag has to be changed.
> Let's ignore kprobes here.
done.
> > Oleg. >
Sebastian
| |