Lines Matching refs:child
37 void __ptrace_link(struct task_struct *child, struct task_struct *new_parent) in __ptrace_link() argument
39 BUG_ON(!list_empty(&child->ptrace_entry)); in __ptrace_link()
40 list_add(&child->ptrace_entry, &new_parent->ptraced); in __ptrace_link()
41 child->parent = new_parent; in __ptrace_link()
72 void __ptrace_unlink(struct task_struct *child) in __ptrace_unlink() argument
74 BUG_ON(!child->ptrace); in __ptrace_unlink()
76 child->ptrace = 0; in __ptrace_unlink()
77 child->parent = child->real_parent; in __ptrace_unlink()
78 list_del_init(&child->ptrace_entry); in __ptrace_unlink()
80 spin_lock(&child->sighand->siglock); in __ptrace_unlink()
86 task_clear_jobctl_pending(child, JOBCTL_TRAP_MASK); in __ptrace_unlink()
87 task_clear_jobctl_trapping(child); in __ptrace_unlink()
93 if (!(child->flags & PF_EXITING) && in __ptrace_unlink()
94 (child->signal->flags & SIGNAL_STOP_STOPPED || in __ptrace_unlink()
95 child->signal->group_stop_count)) { in __ptrace_unlink()
96 child->jobctl |= JOBCTL_STOP_PENDING; in __ptrace_unlink()
105 if (!(child->jobctl & JOBCTL_STOP_SIGMASK)) in __ptrace_unlink()
106 child->jobctl |= SIGSTOP; in __ptrace_unlink()
115 if (child->jobctl & JOBCTL_STOP_PENDING || task_is_traced(child)) in __ptrace_unlink()
116 ptrace_signal_wake_up(child, true); in __ptrace_unlink()
118 spin_unlock(&child->sighand->siglock); in __ptrace_unlink()
172 static int ptrace_check_attach(struct task_struct *child, bool ignore_state) in ptrace_check_attach() argument
184 if (child->ptrace && child->parent == current) { in ptrace_check_attach()
185 WARN_ON(child->state == __TASK_TRACED); in ptrace_check_attach()
190 if (ignore_state || ptrace_freeze_traced(child)) in ptrace_check_attach()
196 if (!wait_task_inactive(child, __TASK_TRACED)) { in ptrace_check_attach()
202 WARN_ON(child->state == __TASK_TRACED); in ptrace_check_attach()
480 static int ptrace_detach(struct task_struct *child, unsigned int data) in ptrace_detach() argument
486 ptrace_disable(child); in ptrace_detach()
487 clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); in ptrace_detach()
494 WARN_ON(!child->ptrace || child->exit_state); in ptrace_detach()
499 child->exit_code = data; in ptrace_detach()
500 __ptrace_detach(current, child); in ptrace_detach()
503 proc_ptrace_connector(child, PTRACE_DETACH); in ptrace_detach()
575 static int ptrace_setoptions(struct task_struct *child, unsigned long data) in ptrace_setoptions() argument
583 flags = child->ptrace; in ptrace_setoptions()
586 child->ptrace = flags; in ptrace_setoptions()
591 static int ptrace_getsiginfo(struct task_struct *child, siginfo_t *info) in ptrace_getsiginfo() argument
596 if (lock_task_sighand(child, &flags)) { in ptrace_getsiginfo()
598 if (likely(child->last_siginfo != NULL)) { in ptrace_getsiginfo()
599 *info = *child->last_siginfo; in ptrace_getsiginfo()
602 unlock_task_sighand(child, &flags); in ptrace_getsiginfo()
607 static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info) in ptrace_setsiginfo() argument
612 if (lock_task_sighand(child, &flags)) { in ptrace_setsiginfo()
614 if (likely(child->last_siginfo != NULL)) { in ptrace_setsiginfo()
615 *child->last_siginfo = *info; in ptrace_setsiginfo()
618 unlock_task_sighand(child, &flags); in ptrace_setsiginfo()
623 static int ptrace_peek_siginfo(struct task_struct *child, in ptrace_peek_siginfo() argument
644 pending = &child->signal->shared_pending; in ptrace_peek_siginfo()
646 pending = &child->pending; in ptrace_peek_siginfo()
652 spin_lock_irq(&child->sighand->siglock); in ptrace_peek_siginfo()
659 spin_unlock_irq(&child->sighand->siglock); in ptrace_peek_siginfo()
719 static int ptrace_resume(struct task_struct *child, long request, in ptrace_resume() argument
728 set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); in ptrace_resume()
730 clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); in ptrace_resume()
734 set_tsk_thread_flag(child, TIF_SYSCALL_EMU); in ptrace_resume()
736 clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); in ptrace_resume()
742 user_enable_block_step(child); in ptrace_resume()
746 user_enable_single_step(child); in ptrace_resume()
748 user_disable_single_step(child); in ptrace_resume()
766 spin_lock_irq(&child->sighand->siglock); in ptrace_resume()
767 child->exit_code = data; in ptrace_resume()
768 wake_up_state(child, __TASK_TRACED); in ptrace_resume()
770 spin_unlock_irq(&child->sighand->siglock); in ptrace_resume()
822 int ptrace_request(struct task_struct *child, long request, in ptrace_request() argument
825 bool seized = child->ptrace & PT_SEIZED; in ptrace_request()
835 return generic_ptrace_peekdata(child, addr, data); in ptrace_request()
838 return generic_ptrace_pokedata(child, addr, data); in ptrace_request()
844 ret = ptrace_setoptions(child, data); in ptrace_request()
847 ret = put_user(child->ptrace_message, datalp); in ptrace_request()
851 ret = ptrace_peek_siginfo(child, addr, data); in ptrace_request()
855 ret = ptrace_getsiginfo(child, &siginfo); in ptrace_request()
864 ret = ptrace_setsiginfo(child, &siginfo); in ptrace_request()
873 if (copy_to_user(datavp, &child->blocked, sizeof(sigset_t))) in ptrace_request()
900 spin_lock_irq(&child->sighand->siglock); in ptrace_request()
901 child->blocked = new_set; in ptrace_request()
902 spin_unlock_irq(&child->sighand->siglock); in ptrace_request()
919 if (unlikely(!seized || !lock_task_sighand(child, &flags))) in ptrace_request()
928 if (likely(task_set_jobctl_pending(child, JOBCTL_TRAP_STOP))) in ptrace_request()
929 ptrace_signal_wake_up(child, child->jobctl & JOBCTL_LISTENING); in ptrace_request()
931 unlock_task_sighand(child, &flags); in ptrace_request()
944 if (unlikely(!seized || !lock_task_sighand(child, &flags))) in ptrace_request()
947 si = child->last_siginfo; in ptrace_request()
949 child->jobctl |= JOBCTL_LISTENING; in ptrace_request()
954 if (child->jobctl & JOBCTL_TRAP_NOTIFY) in ptrace_request()
955 ptrace_signal_wake_up(child, true); in ptrace_request()
958 unlock_task_sighand(child, &flags); in ptrace_request()
962 ret = ptrace_detach(child, data); in ptrace_request()
967 struct mm_struct *mm = get_task_mm(child); in ptrace_request()
1003 return ptrace_resume(child, request, data); in ptrace_request()
1006 if (child->exit_state) /* already dead */ in ptrace_request()
1008 return ptrace_resume(child, request, SIGKILL); in ptrace_request()
1023 ret = ptrace_regset(child, request, addr, &kiov); in ptrace_request()
1038 struct task_struct *child; in ptrace_get_task_struct() local
1041 child = find_task_by_vpid(pid); in ptrace_get_task_struct()
1042 if (child) in ptrace_get_task_struct()
1043 get_task_struct(child); in ptrace_get_task_struct()
1046 if (!child) in ptrace_get_task_struct()
1048 return child; in ptrace_get_task_struct()
1052 #define arch_ptrace_attach(child) do { } while (0) argument
1058 struct task_struct *child; in SYSCALL_DEFINE4() local
1068 child = ptrace_get_task_struct(pid); in SYSCALL_DEFINE4()
1069 if (IS_ERR(child)) { in SYSCALL_DEFINE4()
1070 ret = PTR_ERR(child); in SYSCALL_DEFINE4()
1075 ret = ptrace_attach(child, request, addr, data); in SYSCALL_DEFINE4()
1081 arch_ptrace_attach(child); in SYSCALL_DEFINE4()
1085 ret = ptrace_check_attach(child, request == PTRACE_KILL || in SYSCALL_DEFINE4()
1090 ret = arch_ptrace(child, request, addr, data); in SYSCALL_DEFINE4()
1092 ptrace_unfreeze_traced(child); in SYSCALL_DEFINE4()
1095 put_task_struct(child); in SYSCALL_DEFINE4()
1123 int compat_ptrace_request(struct task_struct *child, compat_long_t request, in compat_ptrace_request() argument
1134 ret = access_process_vm(child, addr, &word, sizeof(word), 0); in compat_ptrace_request()
1143 ret = access_process_vm(child, addr, &data, sizeof(data), 1); in compat_ptrace_request()
1148 ret = put_user((compat_ulong_t) child->ptrace_message, datap); in compat_ptrace_request()
1152 ret = ptrace_getsiginfo(child, &siginfo); in compat_ptrace_request()
1165 ret = ptrace_setsiginfo(child, &siginfo); in compat_ptrace_request()
1187 ret = ptrace_regset(child, request, addr, &kiov); in compat_ptrace_request()
1195 ret = ptrace_request(child, request, addr, data); in compat_ptrace_request()
1204 struct task_struct *child; in COMPAT_SYSCALL_DEFINE4() local
1212 child = ptrace_get_task_struct(pid); in COMPAT_SYSCALL_DEFINE4()
1213 if (IS_ERR(child)) { in COMPAT_SYSCALL_DEFINE4()
1214 ret = PTR_ERR(child); in COMPAT_SYSCALL_DEFINE4()
1219 ret = ptrace_attach(child, request, addr, data); in COMPAT_SYSCALL_DEFINE4()
1225 arch_ptrace_attach(child); in COMPAT_SYSCALL_DEFINE4()
1229 ret = ptrace_check_attach(child, request == PTRACE_KILL || in COMPAT_SYSCALL_DEFINE4()
1232 ret = compat_arch_ptrace(child, request, addr, data); in COMPAT_SYSCALL_DEFINE4()
1234 ptrace_unfreeze_traced(child); in COMPAT_SYSCALL_DEFINE4()
1238 put_task_struct(child); in COMPAT_SYSCALL_DEFINE4()