Hi Greg, On Tue, 05 Dec 2017 18:30:54 +0100 <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > This is a note to let you know that I've just added the patch titled > > kprobes: Use synchronize_rcu_tasks() for optprobe with CONFIG_PREEMPT=y > > to the 3.18-stable tree which can be found at: > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > The filename of the patch is: > kprobes-use-synchronize_rcu_tasks-for-optprobe-with-config_preempt-y.patch > and it can be found in the queue-3.18 subdirectory. > > If you, or anyone else, feels it should not be added to the stable tree, > please let <stable@xxxxxxxxxxxxxxx> know about it. > This is not for bugfix, but improvement. And also, it depends on TASKS_RCU & commit 7e42776d5ed1fe9a941ed8876c5d15cd7cf5d89f. So, please don't pull it on stable tree. Thank you, > > From foo@baz Tue Dec 5 18:18:39 CET 2017 > From: Masami Hiramatsu <mhiramat@xxxxxxxxxx> > Date: Fri, 20 Oct 2017 08:43:39 +0900 > Subject: kprobes: Use synchronize_rcu_tasks() for optprobe with CONFIG_PREEMPT=y > > From: Masami Hiramatsu <mhiramat@xxxxxxxxxx> > > > [ Upstream commit a30b85df7d599f626973e9cd3056fe755bd778e0 ] > > We want to wait for all potentially preempted kprobes trampoline > execution to have completed. This guarantees that any freed > trampoline memory is not in use by any task in the system anymore. > synchronize_rcu_tasks() gives such a guarantee, so use it. > > Also, this guarantees to wait for all potentially preempted tasks > on the instructions which will be replaced with a jump. > > Since this becomes a problem only when CONFIG_PREEMPT=y, enable > CONFIG_TASKS_RCU=y for synchronize_rcu_tasks() in that case. > > Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx> > Acked-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> > Cc: Ananth N Mavinakayanahalli <ananth@xxxxxxxxxxxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Cc: Naveen N . Rao <naveen.n.rao@xxxxxxxxxxxxxxxxxx> > Cc: Paul E . McKenney <paulmck@xxxxxxxxxxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Link: http://lkml.kernel.org/r/150845661962.5443.17724352636247312231.stgit@devbox > Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> > Signed-off-by: Sasha Levin <alexander.levin@xxxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > --- > arch/Kconfig | 2 +- > kernel/kprobes.c | 14 ++++++++------ > 2 files changed, 9 insertions(+), 7 deletions(-) > > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -74,7 +74,7 @@ config JUMP_LABEL > config OPTPROBES > def_bool y > depends on KPROBES && HAVE_OPTPROBES > - depends on !PREEMPT > + select TASKS_RCU if PREEMPT > > config KPROBES_ON_FTRACE > def_bool y > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -540,13 +540,15 @@ static void kprobe_optimizer(struct work > do_unoptimize_kprobes(); > > /* > - * Step 2: Wait for quiesence period to ensure all running interrupts > - * are done. Because optprobe may modify multiple instructions > - * there is a chance that Nth instruction is interrupted. In that > - * case, running interrupt can return to 2nd-Nth byte of jump > - * instruction. This wait is for avoiding it. > + * Step 2: Wait for quiesence period to ensure all potentially > + * preempted tasks to have normally scheduled. Because optprobe > + * may modify multiple instructions, there is a chance that Nth > + * instruction is preempted. In that case, such tasks can return > + * to 2nd-Nth byte of jump instruction. This wait is for avoiding it. > + * Note that on non-preemptive kernel, this is transparently converted > + * to synchronoze_sched() to wait for all interrupts to have completed. > */ > - synchronize_sched(); > + synchronize_rcu_tasks(); > > /* Step 3: Optimize kprobes after quiesence period */ > do_optimize_kprobes(); > > > Patches currently in stable-queue which might be from mhiramat@xxxxxxxxxx are > > queue-3.18/kprobes-use-synchronize_rcu_tasks-for-optprobe-with-config_preempt-y.patch -- Masami Hiramatsu <mhiramat@xxxxxxxxxx>