Lines Matching refs:rseq
30 static struct rseq *rseq_kernel_fields(struct task_struct *t) in rseq_kernel_fields()
32 return (struct rseq *) t->rseq_fields; in rseq_kernel_fields()
41 struct rseq __user *rseq = t->rseq; in rseq_validate_ro_fields() local
47 if (!user_read_access_begin(rseq, t->rseq_len)) in rseq_validate_ro_fields()
49 unsafe_get_user(cpu_id_start, &rseq->cpu_id_start, efault_end); in rseq_validate_ro_fields()
50 unsafe_get_user(cpu_id, &rseq->cpu_id, efault_end); in rseq_validate_ro_fields()
51 unsafe_get_user(node_id, &rseq->node_id, efault_end); in rseq_validate_ro_fields()
52 unsafe_get_user(mm_cid, &rseq->mm_cid, efault_end); in rseq_validate_ro_fields()
87 unsafe_put_user(value, &t->rseq->field, error_label); \
98 unsafe_put_user(value, &t->rseq->field, error_label)
163 struct rseq __user *rseq = t->rseq; in rseq_update_cpu_node_id() local
174 if (!user_write_access_begin(rseq, t->rseq_len)) in rseq_update_cpu_node_id()
199 struct rseq __user *rseq = t->rseq; in rseq_reset_rseq_cpu_node_id() local
209 if (!user_write_access_begin(rseq, t->rseq_len)) in rseq_reset_rseq_cpu_node_id()
242 static int rseq_get_rseq_cs_ptr_val(struct rseq __user *rseq, u64 *rseq_cs) in rseq_get_rseq_cs_ptr_val() argument
248 if (get_user(*rseq_cs, &rseq->rseq_cs)) in rseq_get_rseq_cs_ptr_val()
251 if (copy_from_user(rseq_cs, &rseq->rseq_cs, sizeof(*rseq_cs))) in rseq_get_rseq_cs_ptr_val()
270 ret = rseq_get_rseq_cs_ptr_val(t->rseq, &ptr); in rseq_get_rseq_cs()
336 ret = get_user(flags, &t->rseq->flags); in rseq_need_restart()
355 static int clear_rseq_cs(struct rseq __user *rseq) in clear_rseq_cs() argument
366 return put_user(0UL, &rseq->rseq_cs); in clear_rseq_cs()
368 if (clear_user(&rseq->rseq_cs, sizeof(rseq->rseq_cs))) in clear_rseq_cs()
400 return clear_rseq_cs(t->rseq); in rseq_ip_fixup()
404 ret = clear_rseq_cs(t->rseq); in rseq_ip_fixup()
463 if (!t->rseq) in rseq_syscall()
474 SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, rseq_len, in SYSCALL_DEFINE4() argument
484 if (current->rseq != rseq || !current->rseq) in SYSCALL_DEFINE4()
493 current->rseq = NULL; in SYSCALL_DEFINE4()
502 if (current->rseq) { in SYSCALL_DEFINE4()
508 if (current->rseq != rseq || rseq_len != current->rseq_len) in SYSCALL_DEFINE4()
527 (rseq_len == ORIG_RSEQ_SIZE && !IS_ALIGNED((unsigned long)rseq, ORIG_RSEQ_SIZE)) || in SYSCALL_DEFINE4()
528 (rseq_len != ORIG_RSEQ_SIZE && (!IS_ALIGNED((unsigned long)rseq, __alignof__(*rseq)) || in SYSCALL_DEFINE4()
529 rseq_len < offsetof(struct rseq, end)))) in SYSCALL_DEFINE4()
531 if (!access_ok(rseq, rseq_len)) in SYSCALL_DEFINE4()
541 if (rseq_get_rseq_cs_ptr_val(rseq, &rseq_cs)) in SYSCALL_DEFINE4()
543 if (rseq_cs && clear_rseq_cs(rseq)) in SYSCALL_DEFINE4()
551 if (get_user(rseq_kernel_fields(current)->cpu_id_start, &rseq->cpu_id_start) || in SYSCALL_DEFINE4()
552 get_user(rseq_kernel_fields(current)->cpu_id, &rseq->cpu_id) || in SYSCALL_DEFINE4()
553 get_user(rseq_kernel_fields(current)->node_id, &rseq->node_id) || in SYSCALL_DEFINE4()
554 get_user(rseq_kernel_fields(current)->mm_cid, &rseq->mm_cid)) in SYSCALL_DEFINE4()
561 current->rseq = rseq; in SYSCALL_DEFINE4()