* [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping
@ 2021-03-03 7:10 ` ShaoBo Huang
0 siblings, 0 replies; 6+ messages in thread
From: ShaoBo Huang @ 2021-03-03 7:10 UTC (permalink / raw)
To: linux, tixy, mhiramat, huangshaobo6, linux-arm-kernel,
linux-kernel, gregkh
Cc: young.liuyang, zengweilin, nixiaoming, chenzefeng2, liucheng32,
kepler.chenxin, xiaoqian9
From: Masami Hiramatsu <mhiramat@kernel.org>
commit f3fbd7ec62dec1528fb8044034e2885f2b257941 upstream
This is arm port of commit 6a5022a56ac3 ("kprobes/x86: Allow to
handle reentered kprobe on single-stepping")
Since the FIQ handlers can interrupt in the single stepping
(or preparing the single stepping, do_debug etc.), we should
consider a kprobe is hit in the NMI handler. Even in that
case, the kprobe is allowed to be reentered as same as the
kprobes hit in kprobe handlers
(KPROBE_HIT_ACTIVE or KPROBE_HIT_SSDONE).
The real issue will happen when a kprobe hit while another
reentered kprobe is processing (KPROBE_REENTER), because
we already consumed a saved-area for the previous kprobe.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
Fixes: 24ba613c9d6c ("ARM kprobes: core code")
Cc: stable@vger.kernel.org #v2.6.25~v4.11
Signed-off-by: huangshaobo <huangshaobo6@huawei.com>
---
arch/arm/probes/kprobes/core.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
index 3eb018fa1a1f..c3362ddd6c4c 100644
--- a/arch/arm/probes/kprobes/core.c
+++ b/arch/arm/probes/kprobes/core.c
@@ -270,6 +270,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
switch (kcb->kprobe_status) {
case KPROBE_HIT_ACTIVE:
case KPROBE_HIT_SSDONE:
+ case KPROBE_HIT_SS:
/* A pre- or post-handler probe got us here. */
kprobes_inc_nmissed_count(p);
save_previous_kprobe(kcb);
@@ -278,6 +279,11 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
singlestep(p, regs, kcb);
restore_previous_kprobe(kcb);
break;
+ case KPROBE_REENTER:
+ /* A nested probe was hit in FIQ, it is a BUG */
+ pr_warn("Unrecoverable kprobe detected at %p.\n",
+ p->addr);
+ /* fall through */
default:
/* impossible cases */
BUG();
--
2.12.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping
@ 2021-03-03 7:10 ` ShaoBo Huang
0 siblings, 0 replies; 6+ messages in thread
From: ShaoBo Huang @ 2021-03-03 7:10 UTC (permalink / raw)
To: linux, tixy, mhiramat, huangshaobo6, linux-arm-kernel,
linux-kernel, gregkh
Cc: young.liuyang, zengweilin, nixiaoming, chenzefeng2, liucheng32,
kepler.chenxin, xiaoqian9
From: Masami Hiramatsu <mhiramat@kernel.org>
commit f3fbd7ec62dec1528fb8044034e2885f2b257941 upstream
This is arm port of commit 6a5022a56ac3 ("kprobes/x86: Allow to
handle reentered kprobe on single-stepping")
Since the FIQ handlers can interrupt in the single stepping
(or preparing the single stepping, do_debug etc.), we should
consider a kprobe is hit in the NMI handler. Even in that
case, the kprobe is allowed to be reentered as same as the
kprobes hit in kprobe handlers
(KPROBE_HIT_ACTIVE or KPROBE_HIT_SSDONE).
The real issue will happen when a kprobe hit while another
reentered kprobe is processing (KPROBE_REENTER), because
we already consumed a saved-area for the previous kprobe.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
Fixes: 24ba613c9d6c ("ARM kprobes: core code")
Cc: stable@vger.kernel.org #v2.6.25~v4.11
Signed-off-by: huangshaobo <huangshaobo6@huawei.com>
---
arch/arm/probes/kprobes/core.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
index 3eb018fa1a1f..c3362ddd6c4c 100644
--- a/arch/arm/probes/kprobes/core.c
+++ b/arch/arm/probes/kprobes/core.c
@@ -270,6 +270,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
switch (kcb->kprobe_status) {
case KPROBE_HIT_ACTIVE:
case KPROBE_HIT_SSDONE:
+ case KPROBE_HIT_SS:
/* A pre- or post-handler probe got us here. */
kprobes_inc_nmissed_count(p);
save_previous_kprobe(kcb);
@@ -278,6 +279,11 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
singlestep(p, regs, kcb);
restore_previous_kprobe(kcb);
break;
+ case KPROBE_REENTER:
+ /* A nested probe was hit in FIQ, it is a BUG */
+ pr_warn("Unrecoverable kprobe detected at %p.\n",
+ p->addr);
+ /* fall through */
default:
/* impossible cases */
BUG();
--
2.12.3
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping
2021-03-03 7:10 ` ShaoBo Huang
@ 2021-03-03 12:18 ` Masami Hiramatsu
-1 siblings, 0 replies; 6+ messages in thread
From: Masami Hiramatsu @ 2021-03-03 12:18 UTC (permalink / raw)
To: ShaoBo Huang
Cc: linux, tixy, linux-arm-kernel, linux-kernel, gregkh,
young.liuyang, zengweilin, nixiaoming, chenzefeng2, liucheng32,
kepler.chenxin, xiaoqian9
Hi ShaoBo,
Thanks for backporting and real bug report!
On Wed, 3 Mar 2021 15:10:52 +0800
ShaoBo Huang <huangshaobo6@huawei.com> wrote:
> From: Masami Hiramatsu <mhiramat@kernel.org>
>
> commit f3fbd7ec62dec1528fb8044034e2885f2b257941 upstream
>
> This is arm port of commit 6a5022a56ac3 ("kprobes/x86: Allow to
> handle reentered kprobe on single-stepping")
>
> Since the FIQ handlers can interrupt in the single stepping
> (or preparing the single stepping, do_debug etc.), we should
> consider a kprobe is hit in the NMI handler. Even in that
> case, the kprobe is allowed to be reentered as same as the
> kprobes hit in kprobe handlers
> (KPROBE_HIT_ACTIVE or KPROBE_HIT_SSDONE).
>
> The real issue will happen when a kprobe hit while another
> reentered kprobe is processing (KPROBE_REENTER), because
> we already consumed a saved-area for the previous kprobe.
>
> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> Signed-off-by: Jon Medhurst <tixy@linaro.org>
> Fixes: 24ba613c9d6c ("ARM kprobes: core code")
> Cc: stable@vger.kernel.org #v2.6.25~v4.11
> Signed-off-by: huangshaobo <huangshaobo6@huawei.com>
> ---
> arch/arm/probes/kprobes/core.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
> index 3eb018fa1a1f..c3362ddd6c4c 100644
> --- a/arch/arm/probes/kprobes/core.c
> +++ b/arch/arm/probes/kprobes/core.c
> @@ -270,6 +270,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> switch (kcb->kprobe_status) {
> case KPROBE_HIT_ACTIVE:
> case KPROBE_HIT_SSDONE:
> + case KPROBE_HIT_SS:
> /* A pre- or post-handler probe got us here. */
> kprobes_inc_nmissed_count(p);
> save_previous_kprobe(kcb);
> @@ -278,6 +279,11 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> singlestep(p, regs, kcb);
> restore_previous_kprobe(kcb);
> break;
> + case KPROBE_REENTER:
> + /* A nested probe was hit in FIQ, it is a BUG */
> + pr_warn("Unrecoverable kprobe detected at %p.\n",
> + p->addr);
> + /* fall through */
> default:
> /* impossible cases */
> BUG();
> --
> 2.12.3
>
--
Masami Hiramatsu <mhiramat@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping
@ 2021-03-03 12:18 ` Masami Hiramatsu
0 siblings, 0 replies; 6+ messages in thread
From: Masami Hiramatsu @ 2021-03-03 12:18 UTC (permalink / raw)
To: ShaoBo Huang
Cc: linux, tixy, linux-arm-kernel, linux-kernel, gregkh,
young.liuyang, zengweilin, nixiaoming, chenzefeng2, liucheng32,
kepler.chenxin, xiaoqian9
Hi ShaoBo,
Thanks for backporting and real bug report!
On Wed, 3 Mar 2021 15:10:52 +0800
ShaoBo Huang <huangshaobo6@huawei.com> wrote:
> From: Masami Hiramatsu <mhiramat@kernel.org>
>
> commit f3fbd7ec62dec1528fb8044034e2885f2b257941 upstream
>
> This is arm port of commit 6a5022a56ac3 ("kprobes/x86: Allow to
> handle reentered kprobe on single-stepping")
>
> Since the FIQ handlers can interrupt in the single stepping
> (or preparing the single stepping, do_debug etc.), we should
> consider a kprobe is hit in the NMI handler. Even in that
> case, the kprobe is allowed to be reentered as same as the
> kprobes hit in kprobe handlers
> (KPROBE_HIT_ACTIVE or KPROBE_HIT_SSDONE).
>
> The real issue will happen when a kprobe hit while another
> reentered kprobe is processing (KPROBE_REENTER), because
> we already consumed a saved-area for the previous kprobe.
>
> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> Signed-off-by: Jon Medhurst <tixy@linaro.org>
> Fixes: 24ba613c9d6c ("ARM kprobes: core code")
> Cc: stable@vger.kernel.org #v2.6.25~v4.11
> Signed-off-by: huangshaobo <huangshaobo6@huawei.com>
> ---
> arch/arm/probes/kprobes/core.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
> index 3eb018fa1a1f..c3362ddd6c4c 100644
> --- a/arch/arm/probes/kprobes/core.c
> +++ b/arch/arm/probes/kprobes/core.c
> @@ -270,6 +270,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> switch (kcb->kprobe_status) {
> case KPROBE_HIT_ACTIVE:
> case KPROBE_HIT_SSDONE:
> + case KPROBE_HIT_SS:
> /* A pre- or post-handler probe got us here. */
> kprobes_inc_nmissed_count(p);
> save_previous_kprobe(kcb);
> @@ -278,6 +279,11 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> singlestep(p, regs, kcb);
> restore_previous_kprobe(kcb);
> break;
> + case KPROBE_REENTER:
> + /* A nested probe was hit in FIQ, it is a BUG */
> + pr_warn("Unrecoverable kprobe detected at %p.\n",
> + p->addr);
> + /* fall through */
> default:
> /* impossible cases */
> BUG();
> --
> 2.12.3
>
--
Masami Hiramatsu <mhiramat@kernel.org>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping
2021-03-03 12:18 ` Masami Hiramatsu
@ 2021-03-04 13:28 ` Greg KH
-1 siblings, 0 replies; 6+ messages in thread
From: Greg KH @ 2021-03-04 13:28 UTC (permalink / raw)
To: Masami Hiramatsu
Cc: ShaoBo Huang, linux, tixy, linux-arm-kernel, linux-kernel,
young.liuyang, zengweilin, nixiaoming, chenzefeng2, liucheng32,
kepler.chenxin, xiaoqian9
On Wed, Mar 03, 2021 at 09:18:27PM +0900, Masami Hiramatsu wrote:
> Hi ShaoBo,
>
> Thanks for backporting and real bug report!
>
> On Wed, 3 Mar 2021 15:10:52 +0800
> ShaoBo Huang <huangshaobo6@huawei.com> wrote:
>
> > From: Masami Hiramatsu <mhiramat@kernel.org>
> >
> > commit f3fbd7ec62dec1528fb8044034e2885f2b257941 upstream
> >
> > This is arm port of commit 6a5022a56ac3 ("kprobes/x86: Allow to
> > handle reentered kprobe on single-stepping")
> >
> > Since the FIQ handlers can interrupt in the single stepping
> > (or preparing the single stepping, do_debug etc.), we should
> > consider a kprobe is hit in the NMI handler. Even in that
> > case, the kprobe is allowed to be reentered as same as the
> > kprobes hit in kprobe handlers
> > (KPROBE_HIT_ACTIVE or KPROBE_HIT_SSDONE).
> >
> > The real issue will happen when a kprobe hit while another
> > reentered kprobe is processing (KPROBE_REENTER), because
> > we already consumed a saved-area for the previous kprobe.
> >
> > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> > Signed-off-by: Jon Medhurst <tixy@linaro.org>
> > Fixes: 24ba613c9d6c ("ARM kprobes: core code")
> > Cc: stable@vger.kernel.org #v2.6.25~v4.11
> > Signed-off-by: huangshaobo <huangshaobo6@huawei.com>
> > ---
> > arch/arm/probes/kprobes/core.c | 6 ++++++
> > 1 file changed, 6 insertions(+)
> >
> > diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
> > index 3eb018fa1a1f..c3362ddd6c4c 100644
> > --- a/arch/arm/probes/kprobes/core.c
> > +++ b/arch/arm/probes/kprobes/core.c
> > @@ -270,6 +270,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> > switch (kcb->kprobe_status) {
> > case KPROBE_HIT_ACTIVE:
> > case KPROBE_HIT_SSDONE:
> > + case KPROBE_HIT_SS:
> > /* A pre- or post-handler probe got us here. */
> > kprobes_inc_nmissed_count(p);
> > save_previous_kprobe(kcb);
> > @@ -278,6 +279,11 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> > singlestep(p, regs, kcb);
> > restore_previous_kprobe(kcb);
> > break;
> > + case KPROBE_REENTER:
> > + /* A nested probe was hit in FIQ, it is a BUG */
> > + pr_warn("Unrecoverable kprobe detected at %p.\n",
> > + p->addr);
> > + /* fall through */
> > default:
> > /* impossible cases */
> > BUG();
> > --
> > 2.12.3
> >
Also queued up to 4.4.y as well.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping
@ 2021-03-04 13:28 ` Greg KH
0 siblings, 0 replies; 6+ messages in thread
From: Greg KH @ 2021-03-04 13:28 UTC (permalink / raw)
To: Masami Hiramatsu
Cc: ShaoBo Huang, linux, tixy, linux-arm-kernel, linux-kernel,
young.liuyang, zengweilin, nixiaoming, chenzefeng2, liucheng32,
kepler.chenxin, xiaoqian9
On Wed, Mar 03, 2021 at 09:18:27PM +0900, Masami Hiramatsu wrote:
> Hi ShaoBo,
>
> Thanks for backporting and real bug report!
>
> On Wed, 3 Mar 2021 15:10:52 +0800
> ShaoBo Huang <huangshaobo6@huawei.com> wrote:
>
> > From: Masami Hiramatsu <mhiramat@kernel.org>
> >
> > commit f3fbd7ec62dec1528fb8044034e2885f2b257941 upstream
> >
> > This is arm port of commit 6a5022a56ac3 ("kprobes/x86: Allow to
> > handle reentered kprobe on single-stepping")
> >
> > Since the FIQ handlers can interrupt in the single stepping
> > (or preparing the single stepping, do_debug etc.), we should
> > consider a kprobe is hit in the NMI handler. Even in that
> > case, the kprobe is allowed to be reentered as same as the
> > kprobes hit in kprobe handlers
> > (KPROBE_HIT_ACTIVE or KPROBE_HIT_SSDONE).
> >
> > The real issue will happen when a kprobe hit while another
> > reentered kprobe is processing (KPROBE_REENTER), because
> > we already consumed a saved-area for the previous kprobe.
> >
> > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> > Signed-off-by: Jon Medhurst <tixy@linaro.org>
> > Fixes: 24ba613c9d6c ("ARM kprobes: core code")
> > Cc: stable@vger.kernel.org #v2.6.25~v4.11
> > Signed-off-by: huangshaobo <huangshaobo6@huawei.com>
> > ---
> > arch/arm/probes/kprobes/core.c | 6 ++++++
> > 1 file changed, 6 insertions(+)
> >
> > diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
> > index 3eb018fa1a1f..c3362ddd6c4c 100644
> > --- a/arch/arm/probes/kprobes/core.c
> > +++ b/arch/arm/probes/kprobes/core.c
> > @@ -270,6 +270,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> > switch (kcb->kprobe_status) {
> > case KPROBE_HIT_ACTIVE:
> > case KPROBE_HIT_SSDONE:
> > + case KPROBE_HIT_SS:
> > /* A pre- or post-handler probe got us here. */
> > kprobes_inc_nmissed_count(p);
> > save_previous_kprobe(kcb);
> > @@ -278,6 +279,11 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
> > singlestep(p, regs, kcb);
> > restore_previous_kprobe(kcb);
> > break;
> > + case KPROBE_REENTER:
> > + /* A nested probe was hit in FIQ, it is a BUG */
> > + pr_warn("Unrecoverable kprobe detected at %p.\n",
> > + p->addr);
> > + /* fall through */
> > default:
> > /* impossible cases */
> > BUG();
> > --
> > 2.12.3
> >
Also queued up to 4.4.y as well.
thanks,
greg k-h
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-03-04 13:30 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-03 7:10 [PATCH 4.9.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping ShaoBo Huang
2021-03-03 7:10 ` ShaoBo Huang
2021-03-03 12:18 ` Masami Hiramatsu
2021-03-03 12:18 ` Masami Hiramatsu
2021-03-04 13:28 ` Greg KH
2021-03-04 13:28 ` Greg KH
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.