kprobes/x86: Use preempt_enable() in optimized_callback()
Subsystems (2)
PATCH 1/1 kprobes/x86: Use preempt_enable() in optimized_callback()
Since commit a19b2e3d7839 ("kprobes/x86: Remove IRQ disabling from ftrace-based/optimized kprobes”) removes local_irq_save/restore() from optimized_callback(), the handler does not protected against reschedule interrupt. If it is able to be preempted (rescheduled) by such interrupt, we don't need to use _no_resched macro. Let's use preempt_enable() instead.
--- arch/x86/kernel/kprobes/opt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/kprobes/opt.c +1 -1
@@ -179,7 +179,7 @@ optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)opt_pre_handler (&op->kp, regs);__this_cpu_write (current_kprobe,NULL ); } -preempt_enable_no_resched (); +preempt_enable (); }NOKPROBE_SYMBOL (optimized_callback);
Quoted 5 lines · Masami Hiramatsu
Since commit
a19b2e3d7839("kprobes/x86: Remove IRQ disabling from ftrace-based/optimized kprobes”) removes local_irq_save/restore() fromoptimized_callback(), the handler does not protected against reschedule interrupt. If it is able to be preempted (rescheduled) by such interrupt, we don't need to use_no_reschedmacro.
must not.
Quoted 15 lines
Let's use
preempt_enable()instead.Fixes a19b2e3d7839 ("kprobes/x86: Remove IRQ disabling from ftrace-based/optimized kprobes”)Reported-by Nadav Amit <[email protected]>Signed-off-by Masami Hiramatsu <[email protected]>--- arch/x86/kernel/kprobes/opt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/x86/kernel/kprobes/opt.c +0
-0
arch/x86/kernel/kprobes/opt.c optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs) · line 183
Quoted 6 lines
arch/x86/kernel/kprobes/opt.c +1
-1@@ -179,7 +179,7 @@ optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)opt_pre_handler (&op->kp, regs);__this_cpu_write (current_kprobe,NULL ); } -preempt_enable_no_resched (); +preempt_enable (); }
Indeed,
tip-bot for Masami Hiramatsu
merge botkprobes/x86: Use preempt_enable() in optimized_callback()
Commit-ID: 2e62024c265aa69315ed02835623740030435380 Gitweb: https://git.kernel.org/tip/2e62024c265aa69315ed02835623740030435380 Author: Masami Hiramatsu <[email protected]> AuthorDate: Sat, 20 Oct 2018 18:47:53 +0900 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 22 Oct 2018 03:31:01 +0200
kprobes/x86: Use preempt_enable() in optimized_callback()
The following commit:
a19b2e3d7839 ("kprobes/x86: Remove IRQ disabling from ftrace-based/optimized kprobes”)
removed local_irq_save/restore() from optimized_callback(), the handler might be interrupted by the rescheduling interrupt and might be rescheduled - so we must not use the preempt_enable_no_resched() macro.
Use preempt_enable() instead, to not lose preemption events.
[ mingo: Improved the changelog. ]
--- arch/x86/kernel/kprobes/opt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/kprobes/opt.c +1 -1
@@ -179,7 +179,7 @@ optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)opt_pre_handler (&op->kp, regs);__this_cpu_write (current_kprobe,NULL ); } -preempt_enable_no_resched (); +preempt_enable (); }NOKPROBE_SYMBOL (optimized_callback);