Lines Matching +full:current +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0
27 info.si_call_addr = (void __user *)KSTK_EIP(current); in trigger_sigsys()
29 info.si_arch = syscall_get_arch(current); in trigger_sigsys()
30 info.si_syscall = syscall_get_nr(current, regs); in trigger_sigsys()
37 struct syscall_user_dispatch *sd = ¤t->syscall_dispatch; in syscall_user_dispatch()
40 if (likely(instruction_pointer(regs) - sd->offset < sd->len)) in syscall_user_dispatch()
46 if (likely(sd->selector)) { in syscall_user_dispatch()
51 if (unlikely(__get_user(state, sd->selector))) { in syscall_user_dispatch()
65 sd->on_dispatch = true; in syscall_user_dispatch()
66 syscall_rollback(current, regs); in syscall_user_dispatch()
72 static int task_set_syscall_user_dispatch(struct task_struct *task, unsigned long mode, in task_set_syscall_user_dispatch() argument
76 switch (mode) { in task_set_syscall_user_dispatch()
79 return -EINVAL; in task_set_syscall_user_dispatch()
84 * sanity against overflow and a 0-sized dispatcher in task_set_syscall_user_dispatch()
89 return -EINVAL; in task_set_syscall_user_dispatch()
93 * if current has memory tagging enabled. in task_set_syscall_user_dispatch()
101 return -EFAULT; in task_set_syscall_user_dispatch()
105 return -EINVAL; in task_set_syscall_user_dispatch()
108 task->syscall_dispatch.selector = selector; in task_set_syscall_user_dispatch()
109 task->syscall_dispatch.offset = offset; in task_set_syscall_user_dispatch()
110 task->syscall_dispatch.len = len; in task_set_syscall_user_dispatch()
111 task->syscall_dispatch.on_dispatch = false; in task_set_syscall_user_dispatch()
113 if (mode == PR_SYS_DISPATCH_ON) in task_set_syscall_user_dispatch()
121 int set_syscall_user_dispatch(unsigned long mode, unsigned long offset, in set_syscall_user_dispatch() argument
124 return task_set_syscall_user_dispatch(current, mode, offset, len, selector); in set_syscall_user_dispatch()
130 struct syscall_user_dispatch *sd = &task->syscall_dispatch; in syscall_user_dispatch_get_config()
134 return -EINVAL; in syscall_user_dispatch_get_config()
137 cfg.mode = PR_SYS_DISPATCH_ON; in syscall_user_dispatch_get_config()
139 cfg.mode = PR_SYS_DISPATCH_OFF; in syscall_user_dispatch_get_config()
141 cfg.offset = sd->offset; in syscall_user_dispatch_get_config()
142 cfg.len = sd->len; in syscall_user_dispatch_get_config()
143 cfg.selector = (__u64)(uintptr_t)sd->selector; in syscall_user_dispatch_get_config()
146 return -EFAULT; in syscall_user_dispatch_get_config()
157 return -EINVAL; in syscall_user_dispatch_set_config()
160 return -EFAULT; in syscall_user_dispatch_set_config()
162 return task_set_syscall_user_dispatch(task, cfg.mode, cfg.offset, cfg.len, in syscall_user_dispatch_set_config()