linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: mhiramat@kernel.org (Masami Hiramatsu)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v13 05/10] arm64: Kprobes with single stepping support
Date: Tue, 14 Jun 2016 10:42:28 +0900	[thread overview]
Message-ID: <20160614104228.0e94341a298b3ca94b2f47c3@kernel.org> (raw)
In-Reply-To: <1464924384-15269-6-git-send-email-dave.long@linaro.org>

Hi David,

I have additional comments on this.

On Thu,  2 Jun 2016 23:26:19 -0400
David Long <dave.long@linaro.org> wrote:
> +/*
> + * The D-flag (Debug mask) is set (masked) upon deug exception entry.

deug -> debug

> + * Kprobes needs to clear (unmask) D-flag -ONLY- in case of recursive
> + * probe i.e. when probe hit from kprobe handler context upon
> + * executing the pre/post handlers. In this case we return with
> + * D-flag clear so that single-stepping can be carried-out.
> + *
> + * Leave D-flag set in all other cases.
> + */
> +static void __kprobes
> +spsr_set_debug_flag(struct pt_regs *regs, int mask)
> +{
> +	unsigned long spsr = regs->pstate;
> +
> +	if (mask)
> +		spsr |= PSR_D_BIT;
> +	else
> +		spsr &= ~PSR_D_BIT;
> +
> +	regs->pstate = spsr;
> +}
> +
[..]
> +
> +int __kprobes kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr)
> +{
> +	struct kprobe *cur = kprobe_running();
> +	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
> +
> +	switch (kcb->kprobe_status) {
> +	case KPROBE_HIT_SS:
> +	case KPROBE_REENTER:
> +		/*
> +		 * We are here because the instruction being single
> +		 * stepped caused a page fault. We reset the current
> +		 * kprobe and the ip points back to the probe address
> +		 * and allow the page fault handler to continue as a
> +		 * normal page fault.
> +		 */
> +		instruction_pointer(regs) = (unsigned long)cur->addr;
> +		if (!instruction_pointer(regs))
> +			BUG();

As according to the recent x86 kprobe bug on fault handler
discussion, here this also need kernel_disable_single_stap()
and spsr_set_debug_flag() in case of KPROBE_REENTER as you did
in kprobe_single_step_handler(). (Also, those code should be
a function for reuse)


> +		if (kcb->kprobe_status == KPROBE_REENTER)
> +			restore_previous_kprobe(kcb);
> +		else
> +			reset_current_kprobe();

Thanks!


-- 
Masami Hiramatsu <mhiramat@kernel.org>

  parent reply	other threads:[~2016-06-14  1:42 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-03  3:26 [PATCH v13 00/10] arm64: Add kernel probes (kprobes) support David Long
2016-06-03  3:26 ` [PATCH v13 01/10] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-06-03 11:36   ` Masami Hiramatsu
2016-06-20  2:43   ` Li Bin
2016-06-23 13:48     ` David Long
2016-06-03  3:26 ` [PATCH v13 02/10] arm64: Add more test functions to insn.c David Long
2016-06-08  1:14   ` Masami Hiramatsu
2016-06-10 14:54     ` David Long
2016-06-03  3:26 ` [PATCH v13 03/10] arm64: add conditional instruction simulation support David Long
2016-06-04  3:53   ` Masami Hiramatsu
2016-06-13  4:19     ` David Long
2016-06-03  3:26 ` [PATCH v13 04/10] arm64: Blacklist non-kprobe-able symbol David Long
2016-06-04  3:40   ` Masami Hiramatsu
2016-06-07  3:52     ` David Long
2016-06-10 19:16     ` David Long
2016-06-03  3:26 ` [PATCH v13 05/10] arm64: Kprobes with single stepping support David Long
2016-06-08  1:07   ` Masami Hiramatsu
2016-06-13  4:10     ` David Long
2016-06-13  6:50       ` Masami Hiramatsu
2016-06-13 15:22         ` David Long
2016-06-14  0:45           ` Masami Hiramatsu
2016-06-22 18:28             ` David Long
2016-06-14  1:42   ` Masami Hiramatsu [this message]
2016-06-03  3:26 ` [PATCH v13 06/10] arm64: Treat all entry code as non-kprobe-able David Long
2016-06-07  0:34   ` Masami Hiramatsu
2016-06-03  3:26 ` [PATCH v13 07/10] arm64: kprobes instruction simulation support David Long
2016-06-03  3:26 ` [PATCH v13 08/10] arm64: Add trampoline code for kretprobes David Long
2016-06-07 10:38   ` Masami Hiramatsu
2016-06-13  4:23     ` David Long
2016-06-03  3:26 ` [PATCH v13 09/10] arm64: Add kernel return probes support (kretprobes) David Long
2016-06-07 10:28   ` Masami Hiramatsu
2016-06-22 18:16     ` David Long
2016-06-03  3:26 ` [PATCH v13 10/10] kprobes: Add arm64 case in kprobe example module David Long
2016-06-07 10:12   ` Masami Hiramatsu
2016-06-08  5:49   ` Huang Shijie
2016-06-27  2:54     ` David Long

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160614104228.0e94341a298b3ca94b2f47c3@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).