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
596 flags = child->ptrace; in ptrace_setoptions()
599 child->ptrace = flags; in ptrace_setoptions()
604 static int ptrace_getsiginfo(struct task_struct *child, siginfo_t *info) in ptrace_getsiginfo() argument
609 if (lock_task_sighand(child, &flags)) { in ptrace_getsiginfo()
611 if (likely(child->last_siginfo != NULL)) { in ptrace_getsiginfo()
612 *info = *child->last_siginfo; in ptrace_getsiginfo()
615 unlock_task_sighand(child, &flags); in ptrace_getsiginfo()
620 static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info) in ptrace_setsiginfo() argument
625 if (lock_task_sighand(child, &flags)) { in ptrace_setsiginfo()
627 if (likely(child->last_siginfo != NULL)) { in ptrace_setsiginfo()
628 *child->last_siginfo = *info; in ptrace_setsiginfo()
631 unlock_task_sighand(child, &flags); in ptrace_setsiginfo()
636 static int ptrace_peek_siginfo(struct task_struct *child, in ptrace_peek_siginfo() argument
657 pending = &child->signal->shared_pending; in ptrace_peek_siginfo()
659 pending = &child->pending; in ptrace_peek_siginfo()
665 spin_lock_irq(&child->sighand->siglock); in ptrace_peek_siginfo()
672 spin_unlock_irq(&child->sighand->siglock); in ptrace_peek_siginfo()
732 static int ptrace_resume(struct task_struct *child, long request, in ptrace_resume() argument
741 set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); in ptrace_resume()
743 clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); in ptrace_resume()
747 set_tsk_thread_flag(child, TIF_SYSCALL_EMU); in ptrace_resume()
749 clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); in ptrace_resume()
755 user_enable_block_step(child); in ptrace_resume()
759 user_enable_single_step(child); in ptrace_resume()
761 user_disable_single_step(child); in ptrace_resume()
779 spin_lock_irq(&child->sighand->siglock); in ptrace_resume()
780 child->exit_code = data; in ptrace_resume()
781 wake_up_state(child, __TASK_TRACED); in ptrace_resume()
783 spin_unlock_irq(&child->sighand->siglock); in ptrace_resume()
835 int ptrace_request(struct task_struct *child, long request, in ptrace_request() argument
838 bool seized = child->ptrace & PT_SEIZED; in ptrace_request()
848 return generic_ptrace_peekdata(child, addr, data); in ptrace_request()
851 return generic_ptrace_pokedata(child, addr, data); in ptrace_request()
857 ret = ptrace_setoptions(child, data); in ptrace_request()
860 ret = put_user(child->ptrace_message, datalp); in ptrace_request()
864 ret = ptrace_peek_siginfo(child, addr, data); in ptrace_request()
868 ret = ptrace_getsiginfo(child, &siginfo); in ptrace_request()
877 ret = ptrace_setsiginfo(child, &siginfo); in ptrace_request()
886 if (copy_to_user(datavp, &child->blocked, sizeof(sigset_t))) in ptrace_request()
913 spin_lock_irq(&child->sighand->siglock); in ptrace_request()
914 child->blocked = new_set; in ptrace_request()
915 spin_unlock_irq(&child->sighand->siglock); in ptrace_request()
932 if (unlikely(!seized || !lock_task_sighand(child, &flags))) in ptrace_request()
941 if (likely(task_set_jobctl_pending(child, JOBCTL_TRAP_STOP))) in ptrace_request()
942 ptrace_signal_wake_up(child, child->jobctl & JOBCTL_LISTENING); in ptrace_request()
944 unlock_task_sighand(child, &flags); in ptrace_request()
957 if (unlikely(!seized || !lock_task_sighand(child, &flags))) in ptrace_request()
960 si = child->last_siginfo; in ptrace_request()
962 child->jobctl |= JOBCTL_LISTENING; in ptrace_request()
967 if (child->jobctl & JOBCTL_TRAP_NOTIFY) in ptrace_request()
968 ptrace_signal_wake_up(child, true); in ptrace_request()
971 unlock_task_sighand(child, &flags); in ptrace_request()
975 ret = ptrace_detach(child, data); in ptrace_request()
980 struct mm_struct *mm = get_task_mm(child); in ptrace_request()
1016 return ptrace_resume(child, request, data); in ptrace_request()
1019 if (child->exit_state) /* already dead */ in ptrace_request()
1021 return ptrace_resume(child, request, SIGKILL); in ptrace_request()
1036 ret = ptrace_regset(child, request, addr, &kiov); in ptrace_request()
1044 ret = seccomp_get_filter(child, addr, datavp); in ptrace_request()
1056 struct task_struct *child; in ptrace_get_task_struct() local
1059 child = find_task_by_vpid(pid); in ptrace_get_task_struct()
1060 if (child) in ptrace_get_task_struct()
1061 get_task_struct(child); in ptrace_get_task_struct()
1064 if (!child) in ptrace_get_task_struct()
1066 return child; in ptrace_get_task_struct()
1070 #define arch_ptrace_attach(child) do { } while (0) argument
1076 struct task_struct *child; in SYSCALL_DEFINE4() local
1086 child = ptrace_get_task_struct(pid); in SYSCALL_DEFINE4()
1087 if (IS_ERR(child)) { in SYSCALL_DEFINE4()
1088 ret = PTR_ERR(child); in SYSCALL_DEFINE4()
1093 ret = ptrace_attach(child, request, addr, data); in SYSCALL_DEFINE4()
1099 arch_ptrace_attach(child); in SYSCALL_DEFINE4()
1103 ret = ptrace_check_attach(child, request == PTRACE_KILL || in SYSCALL_DEFINE4()
1108 ret = arch_ptrace(child, request, addr, data); in SYSCALL_DEFINE4()
1110 ptrace_unfreeze_traced(child); in SYSCALL_DEFINE4()
1113 put_task_struct(child); in SYSCALL_DEFINE4()
1141 int compat_ptrace_request(struct task_struct *child, compat_long_t request, in compat_ptrace_request() argument
1152 ret = access_process_vm(child, addr, &word, sizeof(word), 0); in compat_ptrace_request()
1161 ret = access_process_vm(child, addr, &data, sizeof(data), 1); in compat_ptrace_request()
1166 ret = put_user((compat_ulong_t) child->ptrace_message, datap); in compat_ptrace_request()
1170 ret = ptrace_getsiginfo(child, &siginfo); in compat_ptrace_request()
1183 ret = ptrace_setsiginfo(child, &siginfo); in compat_ptrace_request()
1205 ret = ptrace_regset(child, request, addr, &kiov); in compat_ptrace_request()
1213 ret = ptrace_request(child, request, addr, data); in compat_ptrace_request()
1222 struct task_struct *child; in COMPAT_SYSCALL_DEFINE4() local
1230 child = ptrace_get_task_struct(pid); in COMPAT_SYSCALL_DEFINE4()
1231 if (IS_ERR(child)) { in COMPAT_SYSCALL_DEFINE4()
1232 ret = PTR_ERR(child); in COMPAT_SYSCALL_DEFINE4()
1237 ret = ptrace_attach(child, request, addr, data); in COMPAT_SYSCALL_DEFINE4()
1243 arch_ptrace_attach(child); in COMPAT_SYSCALL_DEFINE4()
1247 ret = ptrace_check_attach(child, request == PTRACE_KILL || in COMPAT_SYSCALL_DEFINE4()
1250 ret = compat_arch_ptrace(child, request, addr, data); in COMPAT_SYSCALL_DEFINE4()
1252 ptrace_unfreeze_traced(child); in COMPAT_SYSCALL_DEFINE4()
1256 put_task_struct(child); in COMPAT_SYSCALL_DEFINE4()