lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20210227091701.23944-1-huangshaobo6@huawei.com> Date: Sat, 27 Feb 2021 17:17:01 +0800 From: huangshaobo <huangshaobo6@...wei.com> To: <linux@....linux.org.uk>, <huangshaobo6@...wei.com>, <mhiramat@...nel.org>, <tixy@...aro.org>, <linux-arm-kernel@...ts.infradead.org>, <linux-kernel@...r.kernel.org>, <gregkh@...uxfoundation.org> CC: <zengweilin@...wei.com>, <young.liuyang@...wei.com>, <nixiaoming@...wei.com>, <chenzefeng2@...wei.com>, <liucheng32@...wei.com>, <kepler.chenxin@...wei.com>, <xiaoqian9@...wei.com> Subject: [PATCH 4.4.y] arm: kprobes: Allow to handle reentered kprobe on single-stepping From: Masami Hiramatsu <mhiramat@...nel.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@...nel.org> Signed-off-by: Jon Medhurst <tixy@...aro.org> Fixes: 24ba613c9d6c ("ARM kprobes: core code") Cc: stable@...r.kernel.org #v2.6.25~v4.11 Signed-off-by: huangshaobo <huangshaobo6@...wei.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
Powered by blists - more mailing lists