* [PATCH] kprobes: Do not disarm disabled ftrace kprobe
@ 2020-09-17 23:17 Steven Rostedt
2020-09-18 2:01 ` Masami Hiramatsu
0 siblings, 1 reply; 3+ messages in thread
From: Steven Rostedt @ 2020-09-17 23:17 UTC (permalink / raw)
To: Masami Hiramatsu; +Cc: LKML, Ingo Molnar, Muchun Song, Chengming Zhou
From: Steven Rostedt (VMware) <rostedt@goodmis.org>
Only disable a ftrace probe if it is enabled, otherwise:
The following triggers a warning:
# modprobe trace_printk
# echo "p:kprobes1/event1 trace_printk:trace_printk_irq_work" > /sys/kernel/tracing/kprobe_events
# rmmod trace_printk
------------[ cut here ]------------
Failed to disarm kprobe-ftrace at trace_printk_irq_work+0x0/0x76 [trace_printk] (-2)
WARNING: CPU: 5 PID: 4852 at kernel/kprobes.c:1100 __disarm_kprobe_ftrace.isra.0+0x78/0xa0
Modules linked in: trace_printk(-) [..] [last unloaded: trace_printk]
CPU: 5 PID: 4852 Comm: rmmod Tainted: G W 5.9.0-rc4-test+ #506
Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016
RIP: 0010:__disarm_kprobe_ftrace.isra.0+0x78/0xa0
Code: 8b 03 eb cb 80 3d 5d 95 58 01 00 75 de 48 8b 75 00 89 c2 89 44 24 04 48 c7 c7 38 e3 33 8b c6 05 43 95 58 01 01 e8 c8 1d ef ff <0f> 0b 8b 44 24 04 eb b9 89 c6 48 c7 c7 08 e3 33 8b 89 44 24 04 e8
RSP: 0018:ffff971ce04b7e38 EFLAGS: 00010282
RAX: 0000000000000000 RBX: ffffffff8c900b30 RCX: 0000000000000000
RDX: 0000000000000001 RSI: ffffffff8a16c5af RDI: ffffffff8a16c5af
RBP: ffff971cf2722440 R08: 0000000000000001 R09: 0000000000000001
R10: 0000000000000000 R11: 0000000000000046 R12: ffffffff8b7b33a0
R13: ffffffff8c901eb0 R14: 0000000000000000 R15: 0000000000000000
FS: 00007f4fe349b740(0000) GS:ffff971d5ab40000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000055d07b0148b8 CR3: 00000000b76cc006 CR4: 00000000001706e0
Call Trace:
kprobes_module_callback+0x1b3/0x3c0
notifier_call_chain+0x47/0x70
blocking_notifier_call_chain+0x43/0x60
__x64_sys_delete_module+0x161/0x2a0
do_syscall_64+0x33/0x40
entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x7f4fe35cb00b
Code: 73 01 c3 48 8b 0d 7d fe 0b 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 4d fe 0b 00 f7 d8 64 89 01 48
RSP: 002b:00007ffe820f9888 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
RAX: ffffffffffffffda RBX: 000055d07b00a800 RCX: 00007f4fe35cb00b
RDX: 000000000000000a RSI: 0000000000000800 RDI: 000055d07b00a868
RBP: 00007ffe820f98e8 R08: 0000000000000000 R09: 0000000000000000
R10: 00007f4fe363eac0 R11: 0000000000000206 R12: 00007ffe820f9ab0
R13: 00007ffe820fb223 R14: 000055d07b00a2a0 R15: 000055d07b00a800
irq event stamp: 7463
hardirqs last enabled at (7489): [<ffffffff8a1ab4cd>] __tick_nohz_task_switch+0xad/0xc0
hardirqs last disabled at (7510): [<ffffffff8a1ab4d4>] __tick_nohz_task_switch+0xb4/0xc0
softirqs last enabled at (7530): [<ffffffff8ae003b4>] __do_softirq+0x3b4/0x501
softirqs last disabled at (7545): [<ffffffff8ac01072>] asm_call_on_stack+0x12/0x20
---[ end trace 71f3303cdebb63e3 ]---
As well as the following two ftrace selftests fail:
test.d/kprobe/kprobe_module.tc
test.d/kprobe/kretprobe_args.tc
This is because we are trying to remove a probe that is not enabled or
registered with ftrace, but exists in the kprobe tables.
Cc: stable@vger.kernel.org
Fixes: 0cb2f1372baa ("kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index 287b263c9cb9..7557883771f9 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -1088,6 +1088,9 @@ static int __disarm_kprobe_ftrace(struct kprobe *p, struct ftrace_ops *ops,
{
int ret = 0;
+ if (kprobe_disabled(p))
+ return ret;
+
if (*cnt == 1) {
ret = unregister_ftrace_function(ops);
if (WARN(ret < 0, "Failed to unregister kprobe-ftrace (%d)\n", ret))
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] kprobes: Do not disarm disabled ftrace kprobe
2020-09-17 23:17 [PATCH] kprobes: Do not disarm disabled ftrace kprobe Steven Rostedt
@ 2020-09-18 2:01 ` Masami Hiramatsu
2020-09-18 3:11 ` Steven Rostedt
0 siblings, 1 reply; 3+ messages in thread
From: Masami Hiramatsu @ 2020-09-18 2:01 UTC (permalink / raw)
To: Steven Rostedt; +Cc: LKML, Ingo Molnar, Muchun Song, Chengming Zhou
Hi Steve,
Ah, this seems to fix same issue which I sent.
https://lkml.kernel.org/r/159888672694.1411785.5987998076694782591.stgit@devnote2
Could you confirm it?
Thank you,
On Thu, 17 Sep 2020 19:17:54 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:
> From: Steven Rostedt (VMware) <rostedt@goodmis.org>
>
> Only disable a ftrace probe if it is enabled, otherwise:
>
> The following triggers a warning:
>
> # modprobe trace_printk
> # echo "p:kprobes1/event1 trace_printk:trace_printk_irq_work" > /sys/kernel/tracing/kprobe_events
> # rmmod trace_printk
>
> ------------[ cut here ]------------
> Failed to disarm kprobe-ftrace at trace_printk_irq_work+0x0/0x76 [trace_printk] (-2)
> WARNING: CPU: 5 PID: 4852 at kernel/kprobes.c:1100 __disarm_kprobe_ftrace.isra.0+0x78/0xa0
> Modules linked in: trace_printk(-) [..] [last unloaded: trace_printk]
> CPU: 5 PID: 4852 Comm: rmmod Tainted: G W 5.9.0-rc4-test+ #506
> Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016
> RIP: 0010:__disarm_kprobe_ftrace.isra.0+0x78/0xa0
> Code: 8b 03 eb cb 80 3d 5d 95 58 01 00 75 de 48 8b 75 00 89 c2 89 44 24 04 48 c7 c7 38 e3 33 8b c6 05 43 95 58 01 01 e8 c8 1d ef ff <0f> 0b 8b 44 24 04 eb b9 89 c6 48 c7 c7 08 e3 33 8b 89 44 24 04 e8
> RSP: 0018:ffff971ce04b7e38 EFLAGS: 00010282
> RAX: 0000000000000000 RBX: ffffffff8c900b30 RCX: 0000000000000000
> RDX: 0000000000000001 RSI: ffffffff8a16c5af RDI: ffffffff8a16c5af
> RBP: ffff971cf2722440 R08: 0000000000000001 R09: 0000000000000001
> R10: 0000000000000000 R11: 0000000000000046 R12: ffffffff8b7b33a0
> R13: ffffffff8c901eb0 R14: 0000000000000000 R15: 0000000000000000
> FS: 00007f4fe349b740(0000) GS:ffff971d5ab40000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 000055d07b0148b8 CR3: 00000000b76cc006 CR4: 00000000001706e0
> Call Trace:
> kprobes_module_callback+0x1b3/0x3c0
> notifier_call_chain+0x47/0x70
> blocking_notifier_call_chain+0x43/0x60
> __x64_sys_delete_module+0x161/0x2a0
> do_syscall_64+0x33/0x40
> entry_SYSCALL_64_after_hwframe+0x44/0xa9
> RIP: 0033:0x7f4fe35cb00b
> Code: 73 01 c3 48 8b 0d 7d fe 0b 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 4d fe 0b 00 f7 d8 64 89 01 48
> RSP: 002b:00007ffe820f9888 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
> RAX: ffffffffffffffda RBX: 000055d07b00a800 RCX: 00007f4fe35cb00b
> RDX: 000000000000000a RSI: 0000000000000800 RDI: 000055d07b00a868
> RBP: 00007ffe820f98e8 R08: 0000000000000000 R09: 0000000000000000
> R10: 00007f4fe363eac0 R11: 0000000000000206 R12: 00007ffe820f9ab0
> R13: 00007ffe820fb223 R14: 000055d07b00a2a0 R15: 000055d07b00a800
> irq event stamp: 7463
> hardirqs last enabled at (7489): [<ffffffff8a1ab4cd>] __tick_nohz_task_switch+0xad/0xc0
> hardirqs last disabled at (7510): [<ffffffff8a1ab4d4>] __tick_nohz_task_switch+0xb4/0xc0
> softirqs last enabled at (7530): [<ffffffff8ae003b4>] __do_softirq+0x3b4/0x501
> softirqs last disabled at (7545): [<ffffffff8ac01072>] asm_call_on_stack+0x12/0x20
> ---[ end trace 71f3303cdebb63e3 ]---
>
> As well as the following two ftrace selftests fail:
>
> test.d/kprobe/kprobe_module.tc
> test.d/kprobe/kretprobe_args.tc
>
> This is because we are trying to remove a probe that is not enabled or
> registered with ftrace, but exists in the kprobe tables.
>
> Cc: stable@vger.kernel.org
> Fixes: 0cb2f1372baa ("kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler")
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
> diff --git a/kernel/kprobes.c b/kernel/kprobes.c
> index 287b263c9cb9..7557883771f9 100644
> --- a/kernel/kprobes.c
> +++ b/kernel/kprobes.c
> @@ -1088,6 +1088,9 @@ static int __disarm_kprobe_ftrace(struct kprobe *p, struct ftrace_ops *ops,
> {
> int ret = 0;
>
> + if (kprobe_disabled(p))
> + return ret;
> +
> if (*cnt == 1) {
> ret = unregister_ftrace_function(ops);
> if (WARN(ret < 0, "Failed to unregister kprobe-ftrace (%d)\n", ret))
--
Masami Hiramatsu <mhiramat@kernel.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] kprobes: Do not disarm disabled ftrace kprobe
2020-09-18 2:01 ` Masami Hiramatsu
@ 2020-09-18 3:11 ` Steven Rostedt
0 siblings, 0 replies; 3+ messages in thread
From: Steven Rostedt @ 2020-09-18 3:11 UTC (permalink / raw)
To: Masami Hiramatsu; +Cc: LKML, Ingo Molnar, Muchun Song, Chengming Zhou
On Fri, 18 Sep 2020 11:01:22 +0900
Masami Hiramatsu <mhiramat@kernel.org> wrote:
> Hi Steve,
>
> Ah, this seems to fix same issue which I sent.
>
> https://lkml.kernel.org/r/159888672694.1411785.5987998076694782591.stgit@devnote2
>
> Could you confirm it?
Ah, OK. I'm going through my backlog (which was created by Linux
Plumbers, and then me going on vacation for 10 days) and I'm only at
Aug 19th :-p
If that patch fixes the issue, I'll drop mine in favor of yours.
Thanks, and sorry for the noise.
-- Steve
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-09-18 3:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-17 23:17 [PATCH] kprobes: Do not disarm disabled ftrace kprobe Steven Rostedt
2020-09-18 2:01 ` Masami Hiramatsu
2020-09-18 3:11 ` Steven Rostedt
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).