In preparation to have arguments of a function passed to callbacks attached to functions as default, change the default callback prototype to receive a struct ftrace_regs as the forth parameter instead of a pt_regs. For callbacks that set the FL_SAVE_REGS flag in their ftrace_ops flags, they will now need to get the pt_regs via a ftrace_get_regs() helper call. If this is called by a callback that their ftrace_ops did not have a FL_SAVE_REGS flag set, it that helper function will return NULL. This will allow the ftrace_regs to hold enough just to get the parameters and stack pointer, but without the worry that callbacks may have a pt_regs that is not completely filled.
Showing the changes to kernel/livepatch/patch.c (1 of 18 files). Show all
Unified · Split
| @@ -40,8 +40,9 @@ struct klp_ops *klp_find_ops(void *old_func) · 39 unmodified lines | |||
| 40 | static void notrace klp_ftrace_handler(unsigned long ip, | 40 | static void notrace klp_ftrace_handler(unsigned long ip, |
| 41 | unsigned long parent_ip, | 41 | unsigned long parent_ip, |
| 42 | struct ftrace_ops *fops, | 42 | struct ftrace_ops *fops, |
| 43 | struct pt_regs *regs) | 43 | struct ftrace_regs *fregs) |
| 44 | { | 44 | { |
| 45 | struct pt_regs *regs = ftrace_get_regs(fregs); | ||
| 45 | struct klp_ops *ops; | 46 | struct klp_ops *ops; |
| 46 | struct klp_func *func; | 47 | struct klp_func *func; |
| 47 | int patch_state; | 48 | int patch_state; |