• Home
  • Raw
  • Download

Lines Matching refs:child

68 void __ptrace_link(struct task_struct *child, struct task_struct *new_parent,  in __ptrace_link()  argument
71 BUG_ON(!list_empty(&child->ptrace_entry)); in __ptrace_link()
72 list_add(&child->ptrace_entry, &new_parent->ptraced); in __ptrace_link()
73 child->parent = new_parent; in __ptrace_link()
74 child->ptracer_cred = get_cred(ptracer_cred); in __ptrace_link()
83 static void ptrace_link(struct task_struct *child, struct task_struct *new_parent) in ptrace_link() argument
85 __ptrace_link(child, new_parent, current_cred()); in ptrace_link()
116 void __ptrace_unlink(struct task_struct *child) in __ptrace_unlink() argument
119 BUG_ON(!child->ptrace); in __ptrace_unlink()
121 clear_task_syscall_work(child, SYSCALL_TRACE); in __ptrace_unlink()
123 clear_task_syscall_work(child, SYSCALL_EMU); in __ptrace_unlink()
126 child->parent = child->real_parent; in __ptrace_unlink()
127 list_del_init(&child->ptrace_entry); in __ptrace_unlink()
128 old_cred = child->ptracer_cred; in __ptrace_unlink()
129 child->ptracer_cred = NULL; in __ptrace_unlink()
132 spin_lock(&child->sighand->siglock); in __ptrace_unlink()
133 child->ptrace = 0; in __ptrace_unlink()
138 task_clear_jobctl_pending(child, JOBCTL_TRAP_MASK); in __ptrace_unlink()
139 task_clear_jobctl_trapping(child); in __ptrace_unlink()
145 if (!(child->flags & PF_EXITING) && in __ptrace_unlink()
146 (child->signal->flags & SIGNAL_STOP_STOPPED || in __ptrace_unlink()
147 child->signal->group_stop_count)) { in __ptrace_unlink()
148 child->jobctl |= JOBCTL_STOP_PENDING; in __ptrace_unlink()
157 if (!(child->jobctl & JOBCTL_STOP_SIGMASK)) in __ptrace_unlink()
158 child->jobctl |= SIGSTOP; in __ptrace_unlink()
167 if (child->jobctl & JOBCTL_STOP_PENDING || task_is_traced(child)) in __ptrace_unlink()
168 ptrace_signal_wake_up(child, true); in __ptrace_unlink()
170 spin_unlock(&child->sighand->siglock); in __ptrace_unlink()
246 static int ptrace_check_attach(struct task_struct *child, bool ignore_state) in ptrace_check_attach() argument
258 if (child->ptrace && child->parent == current) { in ptrace_check_attach()
259 WARN_ON(READ_ONCE(child->__state) == __TASK_TRACED); in ptrace_check_attach()
264 if (ignore_state || ptrace_freeze_traced(child)) in ptrace_check_attach()
270 if (!wait_task_inactive(child, __TASK_TRACED)) { in ptrace_check_attach()
276 WARN_ON(READ_ONCE(child->__state) == __TASK_TRACED); in ptrace_check_attach()
588 static int ptrace_detach(struct task_struct *child, unsigned int data) in ptrace_detach() argument
594 ptrace_disable(child); in ptrace_detach()
601 WARN_ON(!child->ptrace || child->exit_state); in ptrace_detach()
606 child->exit_code = data; in ptrace_detach()
607 __ptrace_detach(current, child); in ptrace_detach()
610 proc_ptrace_connector(child, PTRACE_DETACH); in ptrace_detach()
684 static int ptrace_setoptions(struct task_struct *child, unsigned long data) in ptrace_setoptions() argument
694 flags = child->ptrace; in ptrace_setoptions()
697 child->ptrace = flags; in ptrace_setoptions()
702 static int ptrace_getsiginfo(struct task_struct *child, kernel_siginfo_t *info) in ptrace_getsiginfo() argument
707 if (lock_task_sighand(child, &flags)) { in ptrace_getsiginfo()
709 if (likely(child->last_siginfo != NULL)) { in ptrace_getsiginfo()
710 copy_siginfo(info, child->last_siginfo); in ptrace_getsiginfo()
713 unlock_task_sighand(child, &flags); in ptrace_getsiginfo()
718 static int ptrace_setsiginfo(struct task_struct *child, const kernel_siginfo_t *info) in ptrace_setsiginfo() argument
723 if (lock_task_sighand(child, &flags)) { in ptrace_setsiginfo()
725 if (likely(child->last_siginfo != NULL)) { in ptrace_setsiginfo()
726 copy_siginfo(child->last_siginfo, info); in ptrace_setsiginfo()
729 unlock_task_sighand(child, &flags); in ptrace_setsiginfo()
734 static int ptrace_peek_siginfo(struct task_struct *child, in ptrace_peek_siginfo() argument
759 pending = &child->signal->shared_pending; in ptrace_peek_siginfo()
761 pending = &child->pending; in ptrace_peek_siginfo()
768 spin_lock_irq(&child->sighand->siglock); in ptrace_peek_siginfo()
776 spin_unlock_irq(&child->sighand->siglock); in ptrace_peek_siginfo()
852 static int ptrace_resume(struct task_struct *child, long request, in ptrace_resume() argument
861 set_task_syscall_work(child, SYSCALL_TRACE); in ptrace_resume()
863 clear_task_syscall_work(child, SYSCALL_TRACE); in ptrace_resume()
867 set_task_syscall_work(child, SYSCALL_EMU); in ptrace_resume()
869 clear_task_syscall_work(child, SYSCALL_EMU); in ptrace_resume()
875 user_enable_block_step(child); in ptrace_resume()
879 user_enable_single_step(child); in ptrace_resume()
881 user_disable_single_step(child); in ptrace_resume()
899 spin_lock_irq(&child->sighand->siglock); in ptrace_resume()
900 child->exit_code = data; in ptrace_resume()
901 wake_up_state(child, __TASK_TRACED); in ptrace_resume()
903 spin_unlock_irq(&child->sighand->siglock); in ptrace_resume()
955 ptrace_get_syscall_info_entry(struct task_struct *child, struct pt_regs *regs, in ptrace_get_syscall_info_entry() argument
962 info->entry.nr = syscall_get_nr(child, regs); in ptrace_get_syscall_info_entry()
963 syscall_get_arguments(child, regs, args); in ptrace_get_syscall_info_entry()
972 ptrace_get_syscall_info_seccomp(struct task_struct *child, struct pt_regs *regs, in ptrace_get_syscall_info_seccomp() argument
982 ptrace_get_syscall_info_entry(child, regs, info); in ptrace_get_syscall_info_seccomp()
984 info->seccomp.ret_data = child->ptrace_message; in ptrace_get_syscall_info_seccomp()
991 ptrace_get_syscall_info_exit(struct task_struct *child, struct pt_regs *regs, in ptrace_get_syscall_info_exit() argument
995 info->exit.rval = syscall_get_error(child, regs); in ptrace_get_syscall_info_exit()
998 info->exit.rval = syscall_get_return_value(child, regs); in ptrace_get_syscall_info_exit()
1005 ptrace_get_syscall_info(struct task_struct *child, unsigned long user_size, in ptrace_get_syscall_info() argument
1008 struct pt_regs *regs = task_pt_regs(child); in ptrace_get_syscall_info()
1011 .arch = syscall_get_arch(child), in ptrace_get_syscall_info()
1024 switch (child->last_siginfo ? child->last_siginfo->si_code : 0) { in ptrace_get_syscall_info()
1026 switch (child->ptrace_message) { in ptrace_get_syscall_info()
1028 actual_size = ptrace_get_syscall_info_entry(child, regs, in ptrace_get_syscall_info()
1032 actual_size = ptrace_get_syscall_info_exit(child, regs, in ptrace_get_syscall_info()
1038 actual_size = ptrace_get_syscall_info_seccomp(child, regs, in ptrace_get_syscall_info()
1048 int ptrace_request(struct task_struct *child, long request, in ptrace_request() argument
1051 bool seized = child->ptrace & PT_SEIZED; in ptrace_request()
1061 return generic_ptrace_peekdata(child, addr, data); in ptrace_request()
1064 return generic_ptrace_pokedata(child, addr, data); in ptrace_request()
1070 ret = ptrace_setoptions(child, data); in ptrace_request()
1073 ret = put_user(child->ptrace_message, datalp); in ptrace_request()
1077 ret = ptrace_peek_siginfo(child, addr, data); in ptrace_request()
1081 ret = ptrace_getsiginfo(child, &siginfo); in ptrace_request()
1089 ret = ptrace_setsiginfo(child, &siginfo); in ptrace_request()
1100 if (test_tsk_restore_sigmask(child)) in ptrace_request()
1101 mask = &child->saved_sigmask; in ptrace_request()
1103 mask = &child->blocked; in ptrace_request()
1133 spin_lock_irq(&child->sighand->siglock); in ptrace_request()
1134 child->blocked = new_set; in ptrace_request()
1135 spin_unlock_irq(&child->sighand->siglock); in ptrace_request()
1137 clear_tsk_restore_sigmask(child); in ptrace_request()
1154 if (unlikely(!seized || !lock_task_sighand(child, &flags))) in ptrace_request()
1163 if (likely(task_set_jobctl_pending(child, JOBCTL_TRAP_STOP))) in ptrace_request()
1164 ptrace_signal_wake_up(child, child->jobctl & JOBCTL_LISTENING); in ptrace_request()
1166 unlock_task_sighand(child, &flags); in ptrace_request()
1179 if (unlikely(!seized || !lock_task_sighand(child, &flags))) in ptrace_request()
1182 si = child->last_siginfo; in ptrace_request()
1184 child->jobctl |= JOBCTL_LISTENING; in ptrace_request()
1189 if (child->jobctl & JOBCTL_TRAP_NOTIFY) in ptrace_request()
1190 ptrace_signal_wake_up(child, true); in ptrace_request()
1193 unlock_task_sighand(child, &flags); in ptrace_request()
1197 ret = ptrace_detach(child, data); in ptrace_request()
1202 struct mm_struct *mm = get_task_mm(child); in ptrace_request()
1238 return ptrace_resume(child, request, data); in ptrace_request()
1241 send_sig_info(SIGKILL, SEND_SIG_NOINFO, child); in ptrace_request()
1257 ret = ptrace_regset(child, request, addr, &kiov); in ptrace_request()
1264 ret = ptrace_get_syscall_info(child, addr, datavp); in ptrace_request()
1269 ret = seccomp_get_filter(child, addr, datavp); in ptrace_request()
1273 ret = seccomp_get_metadata(child, addr, datavp); in ptrace_request()
1278 ret = ptrace_get_rseq_configuration(child, addr, datavp); in ptrace_request()
1290 #define arch_ptrace_attach(child) do { } while (0) argument
1296 struct task_struct *child; in SYSCALL_DEFINE4() local
1306 child = find_get_task_by_vpid(pid); in SYSCALL_DEFINE4()
1307 if (!child) { in SYSCALL_DEFINE4()
1313 ret = ptrace_attach(child, request, addr, data); in SYSCALL_DEFINE4()
1319 arch_ptrace_attach(child); in SYSCALL_DEFINE4()
1323 ret = ptrace_check_attach(child, request == PTRACE_KILL || in SYSCALL_DEFINE4()
1328 ret = arch_ptrace(child, request, addr, data); in SYSCALL_DEFINE4()
1330 ptrace_unfreeze_traced(child); in SYSCALL_DEFINE4()
1333 put_task_struct(child); in SYSCALL_DEFINE4()
1362 int compat_ptrace_request(struct task_struct *child, compat_long_t request, in compat_ptrace_request() argument
1373 ret = ptrace_access_vm(child, addr, &word, sizeof(word), in compat_ptrace_request()
1383 ret = ptrace_access_vm(child, addr, &data, sizeof(data), in compat_ptrace_request()
1389 ret = put_user((compat_ulong_t) child->ptrace_message, datap); in compat_ptrace_request()
1393 ret = ptrace_getsiginfo(child, &siginfo); in compat_ptrace_request()
1404 ret = ptrace_setsiginfo(child, &siginfo); in compat_ptrace_request()
1426 ret = ptrace_regset(child, request, addr, &kiov); in compat_ptrace_request()
1434 ret = ptrace_request(child, request, addr, data); in compat_ptrace_request()
1443 struct task_struct *child; in COMPAT_SYSCALL_DEFINE4() local
1451 child = find_get_task_by_vpid(pid); in COMPAT_SYSCALL_DEFINE4()
1452 if (!child) { in COMPAT_SYSCALL_DEFINE4()
1458 ret = ptrace_attach(child, request, addr, data); in COMPAT_SYSCALL_DEFINE4()
1464 arch_ptrace_attach(child); in COMPAT_SYSCALL_DEFINE4()
1468 ret = ptrace_check_attach(child, request == PTRACE_KILL || in COMPAT_SYSCALL_DEFINE4()
1471 ret = compat_arch_ptrace(child, request, addr, data); in COMPAT_SYSCALL_DEFINE4()
1473 ptrace_unfreeze_traced(child); in COMPAT_SYSCALL_DEFINE4()
1477 put_task_struct(child); in COMPAT_SYSCALL_DEFINE4()