xref: /openbmc/linux/arch/powerpc/lib/error-inject.c (revision 59dc5bfc)
17cd01b08SNaveen N. Rao // SPDX-License-Identifier: GPL-2.0+
27cd01b08SNaveen N. Rao 
37cd01b08SNaveen N. Rao #include <linux/error-injection.h>
47cd01b08SNaveen N. Rao #include <linux/kprobes.h>
57cd01b08SNaveen N. Rao #include <linux/uaccess.h>
67cd01b08SNaveen N. Rao 
override_function_with_return(struct pt_regs * regs)77cd01b08SNaveen N. Rao void override_function_with_return(struct pt_regs *regs)
87cd01b08SNaveen N. Rao {
97cd01b08SNaveen N. Rao 	/*
107cd01b08SNaveen N. Rao 	 * Emulate 'blr'. 'regs' represents the state on entry of a predefined
117cd01b08SNaveen N. Rao 	 * function in the kernel/module, captured on a kprobe. We don't need
127cd01b08SNaveen N. Rao 	 * to worry about 32-bit userspace on a 64-bit kernel.
137cd01b08SNaveen N. Rao 	 */
14*59dc5bfcSNicholas Piggin 	regs_set_return_ip(regs, regs->link);
157cd01b08SNaveen N. Rao }
167cd01b08SNaveen N. Rao NOKPROBE_SYMBOL(override_function_with_return);
17