All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pratyush Anand <panand@redhat.com>
To: Will Deacon <will.deacon@arm.com>
Cc: "James Morse" <james.morse@arm.com>,
	"David Long" <dave.long@linaro.org>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Sandeepa Prabhu" <sandeepa.s.prabhu@gmail.com>,
	"William Cohen" <wcohen@redhat.com>,
	"Steve Capper" <steve.capper@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	"Marc Zyngier" <marc.zyngier@arm.com>,
	"Dave P Martin" <Dave.Martin@arm.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Robin Murphy" <Robin.Murphy@arm.com>,
	"Ard Biesheuvel" <ard.biesheuvel@linaro.org>,
	"Jens Wiklander" <jens.wiklander@linaro.org>,
	"Christoffer Dall" <christoffer.dall@linaro.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Yang Shi" <yang.shi@linaro.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Viresh Kumar" <viresh.kumar@linaro.org>,
	"Suzuki K. Poulose" <suzuki.poulose@arm.com>,
	"Kees Cook" <keescook@chromium.org>,
	"Zi Shen Lim" <zlim.lnx@gmail.com>,
	"John Blackwood" <john.blackwood@ccur.com>,
	"Feng Kan" <fkan@apm.com>,
	"Balamurugan Shanmugam" <bshanmugam@apm.com>,
	"Vladimir Murzin" <Vladimir.Murzin@arm.com>,
	"Mark Salyzyn" <salyzyn@android.com>,
	"Petr Mladek" <pmladek@suse.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Mark Brown" <broonie@kernel.org>
Subject: Re: [PATCH v11 3/9] arm64: add copy_to/from_user to kprobes blacklist
Date: Tue, 22 Mar 2016 22:21:34 +0530	[thread overview]
Message-ID: <20160322165134.GF15150@dhcppc6.redhat.com> (raw)
In-Reply-To: <20160321145242.GJ23397@arm.com>

Hi Will,

Thanks for the reply.

On 21/03/2016:02:52:43 PM, Will Deacon wrote:
> On Fri, Mar 18, 2016 at 06:59:02PM +0530, Pratyush Anand wrote:
> > On 17/03/2016:01:27:26 PM, Pratyush Anand wrote:
> > > @David: This patch was added in v9 and fixup_exception() had been dropped in v9.
> > > Since, dropping of fixup_exception() also caused to fail some systemtap test
> > > cases, so it was added back in v10. I wonder if we really need this patch.
> > > May be you can try to run related test case by dropping this patch. 
> > 
> > Had a closer look to the code, and noticed that fixup_exception() does not have
> > any role in handling of page fault of copy_to_user(). Then, why do we have the
> > problem.
> > Probably, I can see why does not it work. So, when we are single stepping an
> > instruction and page fault occurs, we will come to el1_da in entry.S. Here, we
> > do enable_dbg. As soon as we will do this, we will start receiving single step
> > exception after each instruction (not sure, probably for each alternate
> > instruction). Since, there will not be any matching single step handler for
> > these instructions, so we will see warning "Unexpected kernel single-step
> > exception at EL1". 
> > 
> > So, I think, we should 
> > 
> > (1) may be do not enable debug for el1_da, or
> > (2) enable_dbg only when single stepping is not enabled, or
> > (3) or disable single stepping during el1_da execution.
> > 
> > (1) will solve the issue for sure, but not sure if it could be the best choice.
> > 
> > Will, what do you suggest?
> 
> Leaving debug exceptions disabled isn't something I'm keen on at all,
> because it leads to blackspots in kernel debugging that I don't think
> should be enforced by the low-level debug machinery. My preference is
> for the higher-level debugger code (e.g. kprobes, kdgb) to ignore the
> events that it's not interested in.

I think this is what the current implementation is, so in the given situation
higher-level debugger code ignore the single step exceptions events, which they
are not expecting.
Here, execution of single stepped instruction is causing to raise another new
exception, say data abort. Now, as soon as we enable debug exceptions while
handling this data abort we will start getting single step exceptions for all
the executed instruction of data abort handler. None of the "higher-level
debugger code" is interested in those events and so they ignore them. We keep on
getting "Unexpected kernel single-step exception at EL1" until all the
instructions for data abort handler are executed.

> 
> It's also very easy to lose track of the debug state if you run preemptible
> code at EL1 with debug exceptions disabled, because kernel debugging is
> per-cpu rather than per-task.

OK.Thanks for this clarification. So, one of the way could be to set a per
cpu variable by higher level debugger code, and then check them in kernel_entry
and kernel_exit and accordingly disable/enable only single stepping. Do you
think, it would be good idea to do that?
If yes, then would adding a new u64 variable say "flags" in struct pt_regs be
acceptable? 

~Pratyush

WARNING: multiple messages have this Message-ID (diff)
From: panand@redhat.com (Pratyush Anand)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v11 3/9] arm64: add copy_to/from_user to kprobes blacklist
Date: Tue, 22 Mar 2016 22:21:34 +0530	[thread overview]
Message-ID: <20160322165134.GF15150@dhcppc6.redhat.com> (raw)
In-Reply-To: <20160321145242.GJ23397@arm.com>

Hi Will,

Thanks for the reply.

On 21/03/2016:02:52:43 PM, Will Deacon wrote:
> On Fri, Mar 18, 2016 at 06:59:02PM +0530, Pratyush Anand wrote:
> > On 17/03/2016:01:27:26 PM, Pratyush Anand wrote:
> > > @David: This patch was added in v9 and fixup_exception() had been dropped in v9.
> > > Since, dropping of fixup_exception() also caused to fail some systemtap test
> > > cases, so it was added back in v10. I wonder if we really need this patch.
> > > May be you can try to run related test case by dropping this patch. 
> > 
> > Had a closer look to the code, and noticed that fixup_exception() does not have
> > any role in handling of page fault of copy_to_user(). Then, why do we have the
> > problem.
> > Probably, I can see why does not it work. So, when we are single stepping an
> > instruction and page fault occurs, we will come to el1_da in entry.S. Here, we
> > do enable_dbg. As soon as we will do this, we will start receiving single step
> > exception after each instruction (not sure, probably for each alternate
> > instruction). Since, there will not be any matching single step handler for
> > these instructions, so we will see warning "Unexpected kernel single-step
> > exception at EL1". 
> > 
> > So, I think, we should 
> > 
> > (1) may be do not enable debug for el1_da, or
> > (2) enable_dbg only when single stepping is not enabled, or
> > (3) or disable single stepping during el1_da execution.
> > 
> > (1) will solve the issue for sure, but not sure if it could be the best choice.
> > 
> > Will, what do you suggest?
> 
> Leaving debug exceptions disabled isn't something I'm keen on at all,
> because it leads to blackspots in kernel debugging that I don't think
> should be enforced by the low-level debug machinery. My preference is
> for the higher-level debugger code (e.g. kprobes, kdgb) to ignore the
> events that it's not interested in.

I think this is what the current implementation is, so in the given situation
higher-level debugger code ignore the single step exceptions events, which they
are not expecting.
Here, execution of single stepped instruction is causing to raise another new
exception, say data abort. Now, as soon as we enable debug exceptions while
handling this data abort we will start getting single step exceptions for all
the executed instruction of data abort handler. None of the "higher-level
debugger code" is interested in those events and so they ignore them. We keep on
getting "Unexpected kernel single-step exception at EL1" until all the
instructions for data abort handler are executed.

> 
> It's also very easy to lose track of the debug state if you run preemptible
> code at EL1 with debug exceptions disabled, because kernel debugging is
> per-cpu rather than per-task.

OK.Thanks for this clarification. So, one of the way could be to set a per
cpu variable by higher level debugger code, and then check them in kernel_entry
and kernel_exit and accordingly disable/enable only single stepping. Do you
think, it would be good idea to do that?
If yes, then would adding a new u64 variable say "flags" in struct pt_regs be
acceptable? 

~Pratyush

  reply	other threads:[~2016-03-22 16:51 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-09  5:32 [PATCH v11 0/9] arm64: Add kernel probes (kprobes) support David Long
2016-03-09  5:32 ` David Long
2016-03-09  5:32 ` [PATCH v11 1/9] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-03-09  5:32   ` David Long
2016-03-11 18:07   ` James Morse
2016-03-11 18:07     ` James Morse
2016-03-18 13:06     ` David Long
2016-03-18 13:06       ` David Long
2016-03-15 11:04   ` Marc Zyngier
2016-03-15 11:04     ` Marc Zyngier
2016-03-21  7:08     ` David Long
2016-03-21  7:08       ` David Long
2016-03-09  5:32 ` [PATCH v11 2/9] arm64: Add more test functions to insn.c David Long
2016-03-09  5:32   ` David Long
2016-03-09  5:32 ` [PATCH v11 3/9] arm64: add copy_to/from_user to kprobes blacklist David Long
2016-03-09  5:32   ` David Long
2016-03-15 18:47   ` James Morse
2016-03-15 18:47     ` James Morse
2016-03-16  5:43     ` Pratyush Anand
2016-03-16  5:43       ` Pratyush Anand
2016-03-16 10:27       ` James Morse
2016-03-16 10:27         ` James Morse
2016-03-17  7:57         ` Pratyush Anand
2016-03-17  7:57           ` Pratyush Anand
2016-03-18 13:29           ` Pratyush Anand
2016-03-18 13:29             ` Pratyush Anand
2016-03-18 14:02             ` James Morse
2016-03-18 14:02               ` James Morse
2016-03-18 14:43               ` Pratyush Anand
2016-03-18 14:43                 ` Pratyush Anand
2016-03-18 18:12                 ` James Morse
2016-03-18 18:12                   ` James Morse
2016-03-21  5:17                   ` Pratyush Anand
2016-03-21  5:17                     ` Pratyush Anand
2016-03-21 14:52             ` Will Deacon
2016-03-21 14:52               ` Will Deacon
2016-03-22 16:51               ` Pratyush Anand [this message]
2016-03-22 16:51                 ` Pratyush Anand
2016-03-17 12:04   ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:04     ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-09  5:32 ` [PATCH v11 4/9] arm64: add conditional instruction simulation support David Long
2016-03-09  5:32   ` David Long
2016-03-13 12:09   ` Marc Zyngier
2016-03-13 12:09     ` Marc Zyngier
2016-03-14  4:04     ` Pratyush Anand
2016-03-14  4:04       ` Pratyush Anand
2016-03-14  7:38       ` Marc Zyngier
2016-03-14  7:38         ` Marc Zyngier
2016-03-21  8:35         ` David Long
2016-03-21  8:35           ` David Long
2016-03-09  5:32 ` [PATCH v11 5/9] arm64: Kprobes with single stepping support David Long
2016-03-09  5:32   ` David Long
2016-04-20  1:29   ` Li Bin
2016-04-20  1:29     ` Li Bin
2016-03-09  5:32 ` [PATCH v11 6/9] arm64: kprobes instruction simulation support David Long
2016-03-09  5:32   ` David Long
2016-03-12  3:56   ` Marc Zyngier
2016-03-12  3:56     ` Marc Zyngier
2016-03-21  9:39     ` David Long
2016-03-21  9:39       ` David Long
2016-03-09  5:32 ` [PATCH v11 7/9] arm64: Add trampoline code for kretprobes David Long
2016-03-09  5:32   ` David Long
2016-03-13 13:52   ` Marc Zyngier
2016-03-13 13:52     ` Marc Zyngier
2016-03-21 13:30     ` David Long
2016-03-21 13:30       ` David Long
2016-03-09  5:32 ` [PATCH v11 8/9] arm64: Add kernel return probes support (kretprobes) David Long
2016-03-09  5:32   ` David Long
2016-03-17 12:22   ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:22     ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:58     ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:58       ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-21 13:33       ` David Long
2016-03-21 13:33         ` David Long
2016-03-09  5:32 ` [PATCH v11 9/9] kprobes: Add arm64 case in kprobe example module David Long
2016-03-09  5:32   ` 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=20160322165134.GF15150@dhcppc6.redhat.com \
    --to=panand@redhat.com \
    --cc=Dave.Martin@arm.com \
    --cc=Robin.Murphy@arm.com \
    --cc=Vladimir.Murzin@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex.bennee@linaro.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=broonie@kernel.org \
    --cc=bshanmugam@apm.com \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=dave.long@linaro.org \
    --cc=fkan@apm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=james.morse@arm.com \
    --cc=jens.wiklander@linaro.org \
    --cc=john.blackwood@ccur.com \
    --cc=keescook@chromium.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=pmladek@suse.com \
    --cc=salyzyn@android.com \
    --cc=sandeepa.s.prabhu@gmail.com \
    --cc=steve.capper@linaro.org \
    --cc=suzuki.poulose@arm.com \
    --cc=viresh.kumar@linaro.org \
    --cc=wcohen@redhat.com \
    --cc=will.deacon@arm.com \
    --cc=yang.shi@linaro.org \
    --cc=zlim.lnx@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.