Re: Q: user_enable_single_step() && update_debugctlmsr()

From: Sebastian Andrzej Siewior
Date: Wed Aug 01 2012 - 10:21:17 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/