diff options
author | Gregory Price <gourry.memverge@gmail.com> | 2023-04-07 20:18:33 +0300 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2023-04-16 15:23:07 +0300 |
commit | 3f67987cdc09778e75098f9f5168832f8f8e1f1c (patch) | |
tree | 48648bbc78fee9bc257739aff7f79031071ae0e8 /include/linux/syscall_user_dispatch.h | |
parent | 463b7715e7ce367fce89769c5d85e31595715ee1 (diff) | |
download | linux-3f67987cdc09778e75098f9f5168832f8f8e1f1c.tar.xz |
ptrace: Provide set/get interface for syscall user dispatch
The syscall user dispatch configuration can only be set by the task itself,
but lacks a ptrace set/get interface which makes it impossible to implement
checkpoint/restore for it.
Add the required ptrace requests and the get/set functions in the syscall
user dispatch code to make that possible.
Signed-off-by: Gregory Price <gregory.price@memverge.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Link: https://lore.kernel.org/r/20230407171834.3558-4-gregory.price@memverge.com
Diffstat (limited to 'include/linux/syscall_user_dispatch.h')
-rw-r--r-- | include/linux/syscall_user_dispatch.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/syscall_user_dispatch.h b/include/linux/syscall_user_dispatch.h index a0ae443fb7df..641ca8880995 100644 --- a/include/linux/syscall_user_dispatch.h +++ b/include/linux/syscall_user_dispatch.h @@ -22,6 +22,12 @@ int set_syscall_user_dispatch(unsigned long mode, unsigned long offset, #define clear_syscall_work_syscall_user_dispatch(tsk) \ clear_task_syscall_work(tsk, SYSCALL_USER_DISPATCH) +int syscall_user_dispatch_get_config(struct task_struct *task, unsigned long size, + void __user *data); + +int syscall_user_dispatch_set_config(struct task_struct *task, unsigned long size, + void __user *data); + #else struct syscall_user_dispatch {}; @@ -35,6 +41,18 @@ static inline void clear_syscall_work_syscall_user_dispatch(struct task_struct * { } +static inline int syscall_user_dispatch_get_config(struct task_struct *task, + unsigned long size, void __user *data) +{ + return -EINVAL; +} + +static inline int syscall_user_dispatch_set_config(struct task_struct *task, + unsigned long size, void __user *data) +{ + return -EINVAL; +} + #endif /* CONFIG_GENERIC_ENTRY */ #endif /* _SYSCALL_USER_DISPATCH_H */ |