x86/stackframe/32: Allow int3_emulate_push()
authorPeter Zijlstra <peterz@infradead.org>
Wed, 8 May 2019 07:40:54 +0000 (09:40 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 25 Jun 2019 08:23:49 +0000 (10:23 +0200)
Now that x86_32 has an unconditional gap on the kernel stack frame,
the int3_emulate_push() thing will work without further changes.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/include/asm/text-patching.h
arch/x86/kernel/ftrace.c

index 880b5515b1d6f4b4e1cba06bf07a4a506de76ca9..ebf185fa30bc730ef3eb64ebf12214e8bcaeee7f 100644 (file)
@@ -51,7 +51,6 @@ static inline void int3_emulate_jmp(struct pt_regs *regs, unsigned long ip)
 #define INT3_INSN_SIZE 1
 #define CALL_INSN_SIZE 5
 
-#ifdef CONFIG_X86_64
 static inline void int3_emulate_push(struct pt_regs *regs, unsigned long val)
 {
        /*
@@ -69,7 +68,6 @@ static inline void int3_emulate_call(struct pt_regs *regs, unsigned long func)
        int3_emulate_push(regs, regs->ip - INT3_INSN_SIZE + CALL_INSN_SIZE);
        int3_emulate_jmp(regs, func);
 }
-#endif /* CONFIG_X86_64 */
 #endif /* !CONFIG_UML_X86 */
 
 #endif /* _ASM_X86_TEXT_PATCHING_H */
index 0927bb158ffca103c586f0a9a2c7838e4701288b..a4eea7bad4a1cb245815ec1daf5ca9391f813950 100644 (file)
@@ -300,7 +300,6 @@ int ftrace_int3_handler(struct pt_regs *regs)
 
        ip = regs->ip - INT3_INSN_SIZE;
 
-#ifdef CONFIG_X86_64
        if (ftrace_location(ip)) {
                int3_emulate_call(regs, (unsigned long)ftrace_regs_caller);
                return 1;
@@ -312,12 +311,6 @@ int ftrace_int3_handler(struct pt_regs *regs)
                int3_emulate_call(regs, ftrace_update_func_call);
                return 1;
        }
-#else
-       if (ftrace_location(ip) || is_ftrace_caller(ip)) {
-               int3_emulate_jmp(regs, ip + CALL_INSN_SIZE);
-               return 1;
-       }
-#endif
 
        return 0;
 }