From: Petr Mladek <[email protected]>

3.12-stable review patch.  If anyone has any objections, please let me know.

===============

commit 12729f14d8357fb845d75155228b21e76360272d upstream.

If a failure occurs while modifying ftrace function, it bails out and will
remove the tracepoints to be back to what the code originally was.

There is missing the final sync run across the CPUs after the fix up is done
and before the ftrace int3 handler flag is reset.

Here's the description of the problem:

        CPU0                            CPU1
        ----                            ----
  remove_breakpoint();
  modifying_ftrace_code = 0;

                                [still sees breakpoint]
                                <takes trap>
                                [sees modifying_ftrace_code as zero]
                                [no breakpoint handler]
                                [goto failed case]
                                [trap exception - kernel breakpoint, no
                                 handler]
                                BUG()

Link: http://lkml.kernel.org/r/[email protected]

Fixes: 8a4d0a687a5 "ftrace: Use breakpoint method to update ftrace caller"
Acked-by: Frederic Weisbecker <[email protected]>
Acked-by: H. Peter Anvin <[email protected]>
Signed-off-by: Petr Mladek <[email protected]>
Signed-off-by: Steven Rostedt <[email protected]>
Signed-off-by: Jiri Slaby <[email protected]>
---
 arch/x86/kernel/ftrace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index e6253195a301..1ffc32dbe450 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -659,8 +659,8 @@ ftrace_modify_code(unsigned long ip, unsigned const char 
*old_code,
                ret = -EPERM;
                goto out;
        }
-       run_sync();
  out:
+       run_sync();
        return ret;
 
  fail_update:
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to