Lines Matching full:task
136 * Apply the GCS mode configured for the specified task to the
139 void gcs_set_el0_mode(struct task_struct *task) in gcs_set_el0_mode() argument
143 if (task->thread.gcs_el0_mode & PR_SHADOW_STACK_ENABLE) in gcs_set_el0_mode()
146 if (task->thread.gcs_el0_mode & PR_SHADOW_STACK_WRITE) in gcs_set_el0_mode()
149 if (task->thread.gcs_el0_mode & PR_SHADOW_STACK_PUSH) in gcs_set_el0_mode()
155 void gcs_free(struct task_struct *task) in gcs_free() argument
166 if (!task->mm || task->mm != current->mm) in gcs_free()
169 if (task->thread.gcs_base) in gcs_free()
170 vm_munmap(task->thread.gcs_base, task->thread.gcs_size); in gcs_free()
172 task->thread.gcspr_el0 = 0; in gcs_free()
173 task->thread.gcs_base = 0; in gcs_free()
174 task->thread.gcs_size = 0; in gcs_free()
177 int arch_set_shadow_stack_status(struct task_struct *task, unsigned long arg) in arch_set_shadow_stack_status() argument
185 if (is_compat_thread(task_thread_info(task))) in arch_set_shadow_stack_status()
192 ret = gcs_check_locked(task, arg); in arch_set_shadow_stack_status()
198 !task_gcs_el0_enabled(task)) { in arch_set_shadow_stack_status()
200 if (task->thread.gcs_base || task->thread.gcspr_el0) in arch_set_shadow_stack_status()
203 if (task != current) in arch_set_shadow_stack_status()
211 task->thread.gcspr_el0 = gcs + size - sizeof(u64); in arch_set_shadow_stack_status()
212 task->thread.gcs_base = gcs; in arch_set_shadow_stack_status()
213 task->thread.gcs_size = size; in arch_set_shadow_stack_status()
214 if (task == current) in arch_set_shadow_stack_status()
215 write_sysreg_s(task->thread.gcspr_el0, in arch_set_shadow_stack_status()
219 task->thread.gcs_el0_mode = arg; in arch_set_shadow_stack_status()
220 if (task == current) in arch_set_shadow_stack_status()
221 gcs_set_el0_mode(task); in arch_set_shadow_stack_status()
226 int arch_get_shadow_stack_status(struct task_struct *task, in arch_get_shadow_stack_status() argument
232 if (is_compat_thread(task_thread_info(task))) in arch_get_shadow_stack_status()
235 return put_user(task->thread.gcs_el0_mode, arg); in arch_get_shadow_stack_status()
238 int arch_lock_shadow_stack_status(struct task_struct *task, in arch_lock_shadow_stack_status() argument
244 if (is_compat_thread(task_thread_info(task))) in arch_lock_shadow_stack_status()
251 task->thread.gcs_el0_locked |= arg; in arch_lock_shadow_stack_status()