diff options
author | Masami Hiramatsu <mhiramat@kernel.org> | 2020-08-29 16:02:47 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2020-09-08 12:52:35 +0300 |
commit | b338817807538c893540e393856b79cbbdf777ea (patch) | |
tree | bf4dadbf3fc3746a7028c415f2baf40032c95e99 /include/linux/kprobes.h | |
parent | e03b4a084ea6b0a18b0e874baec439e69090c168 (diff) | |
download | linux-b338817807538c893540e393856b79cbbdf777ea.tar.xz |
kprobes: Free kretprobe_instance with RCU callback
Free kretprobe_instance with RCU callback instead of directly
freeing the object in the kretprobe handler context.
This will make kretprobe run safer in NMI context.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/159870616685.1229682.11978742048709542226.stgit@devnote2
Diffstat (limited to 'include/linux/kprobes.h')
-rw-r--r-- | include/linux/kprobes.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 72142ae5df3e..3389067d88b1 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h @@ -156,7 +156,10 @@ struct kretprobe { }; struct kretprobe_instance { - struct hlist_node hlist; + union { + struct hlist_node hlist; + struct rcu_head rcu; + }; struct kretprobe *rp; kprobe_opcode_t *ret_addr; struct task_struct *task; @@ -395,7 +398,6 @@ int register_kretprobes(struct kretprobe **rps, int num); void unregister_kretprobes(struct kretprobe **rps, int num); void kprobe_flush_task(struct task_struct *tk); -void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); int disable_kprobe(struct kprobe *kp); int enable_kprobe(struct kprobe *kp); |