From 95d5a3bd358d2cd9e37c7c4255d0abce2d61fd63 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Tue, 29 Oct 2013 16:45:40 +0400 Subject: [PATCH] [FIX] get_regs_ret_func() for x86 Change-Id: I2bfd9e0ef6d622c3c72052617d366fa6b67de9c7 Signed-off-by: Vyacheslav Cherkashin --- writer/kernel_operations.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/writer/kernel_operations.h b/writer/kernel_operations.h index c87c80c..a1494ee 100644 --- a/writer/kernel_operations.h +++ b/writer/kernel_operations.h @@ -55,10 +55,21 @@ #elif defined(CONFIG_X86_32) #define get_regs_ip(regs) regs->ip - 1 -#define get_regs_ret_func(regs) regs->bp + 8 #define get_regs_ret_val(regs) regs->ax #define get_regs_stack_ptr(regs) regs->sp +static inline u32 get_regs_ret_func(struct pt_regs *regs) +{ + u32 addr; + + if (get_user(addr, (u32 *)regs->sp)) { + printk("failed to dereference a pointer, addr=%p\n", addr); + return 0; + } + + return addr; +} + #endif /* CONFIG_arch */ int get_args(unsigned long args[], int cnt, struct pt_regs *regs); -- 2.7.4