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. Raovoid 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