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
This commit is contained in:
committed by
Thomas Gleixner
parent
463b7715e7
commit
3f67987cdc
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user