0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <linux/capability.h>
0012 #include <linux/export.h>
0013 #include <linux/sched.h>
0014 #include <linux/sched/mm.h>
0015 #include <linux/sched/coredump.h>
0016 #include <linux/sched/task.h>
0017 #include <linux/errno.h>
0018 #include <linux/mm.h>
0019 #include <linux/highmem.h>
0020 #include <linux/pagemap.h>
0021 #include <linux/ptrace.h>
0022 #include <linux/security.h>
0023 #include <linux/signal.h>
0024 #include <linux/uio.h>
0025 #include <linux/audit.h>
0026 #include <linux/pid_namespace.h>
0027 #include <linux/syscalls.h>
0028 #include <linux/uaccess.h>
0029 #include <linux/regset.h>
0030 #include <linux/hw_breakpoint.h>
0031 #include <linux/cn_proc.h>
0032 #include <linux/compat.h>
0033 #include <linux/sched/signal.h>
0034 #include <linux/minmax.h>
0035
0036 #include <asm/syscall.h> /* for syscall_get_* */
0037
0038
0039
0040
0041
0042
0043 int ptrace_access_vm(struct task_struct *tsk, unsigned long addr,
0044 void *buf, int len, unsigned int gup_flags)
0045 {
0046 struct mm_struct *mm;
0047 int ret;
0048
0049 mm = get_task_mm(tsk);
0050 if (!mm)
0051 return 0;
0052
0053 if (!tsk->ptrace ||
0054 (current != tsk->parent) ||
0055 ((get_dumpable(mm) != SUID_DUMP_USER) &&
0056 !ptracer_capable(tsk, mm->user_ns))) {
0057 mmput(mm);
0058 return 0;
0059 }
0060
0061 ret = __access_remote_vm(mm, addr, buf, len, gup_flags);
0062 mmput(mm);
0063
0064 return ret;
0065 }
0066
0067
0068 void __ptrace_link(struct task_struct *child, struct task_struct *new_parent,
0069 const struct cred *ptracer_cred)
0070 {
0071 BUG_ON(!list_empty(&child->ptrace_entry));
0072 list_add(&child->ptrace_entry, &new_parent->ptraced);
0073 child->parent = new_parent;
0074 child->ptracer_cred = get_cred(ptracer_cred);
0075 }
0076
0077
0078
0079
0080
0081
0082
0083 static void ptrace_link(struct task_struct *child, struct task_struct *new_parent)
0084 {
0085 __ptrace_link(child, new_parent, current_cred());
0086 }
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116 void __ptrace_unlink(struct task_struct *child)
0117 {
0118 const struct cred *old_cred;
0119 BUG_ON(!child->ptrace);
0120
0121 clear_task_syscall_work(child, SYSCALL_TRACE);
0122 #if defined(CONFIG_GENERIC_ENTRY) || defined(TIF_SYSCALL_EMU)
0123 clear_task_syscall_work(child, SYSCALL_EMU);
0124 #endif
0125
0126 child->parent = child->real_parent;
0127 list_del_init(&child->ptrace_entry);
0128 old_cred = child->ptracer_cred;
0129 child->ptracer_cred = NULL;
0130 put_cred(old_cred);
0131
0132 spin_lock(&child->sighand->siglock);
0133 child->ptrace = 0;
0134
0135
0136
0137
0138 task_clear_jobctl_pending(child, JOBCTL_TRAP_MASK);
0139 task_clear_jobctl_trapping(child);
0140
0141
0142
0143
0144
0145 if (!(child->flags & PF_EXITING) &&
0146 (child->signal->flags & SIGNAL_STOP_STOPPED ||
0147 child->signal->group_stop_count)) {
0148 child->jobctl |= JOBCTL_STOP_PENDING;
0149
0150
0151
0152
0153
0154
0155
0156
0157 if (!(child->jobctl & JOBCTL_STOP_SIGMASK))
0158 child->jobctl |= SIGSTOP;
0159 }
0160
0161
0162
0163
0164
0165
0166
0167 if (child->jobctl & JOBCTL_STOP_PENDING || task_is_traced(child))
0168 ptrace_signal_wake_up(child, true);
0169
0170 spin_unlock(&child->sighand->siglock);
0171 }
0172
0173 static bool looks_like_a_spurious_pid(struct task_struct *task)
0174 {
0175 if (task->exit_code != ((PTRACE_EVENT_EXEC << 8) | SIGTRAP))
0176 return false;
0177
0178 if (task_pid_vnr(task) == task->ptrace_message)
0179 return false;
0180
0181
0182
0183
0184
0185 return true;
0186 }
0187
0188
0189
0190
0191
0192
0193
0194 static bool ptrace_freeze_traced(struct task_struct *task)
0195 {
0196 bool ret = false;
0197
0198
0199 if (task->jobctl & JOBCTL_LISTENING)
0200 return ret;
0201
0202 spin_lock_irq(&task->sighand->siglock);
0203 if (task_is_traced(task) && !looks_like_a_spurious_pid(task) &&
0204 !__fatal_signal_pending(task)) {
0205 task->jobctl |= JOBCTL_PTRACE_FROZEN;
0206 ret = true;
0207 }
0208 spin_unlock_irq(&task->sighand->siglock);
0209
0210 return ret;
0211 }
0212
0213 static void ptrace_unfreeze_traced(struct task_struct *task)
0214 {
0215 unsigned long flags;
0216
0217
0218
0219
0220
0221
0222 if (lock_task_sighand(task, &flags)) {
0223 task->jobctl &= ~JOBCTL_PTRACE_FROZEN;
0224 if (__fatal_signal_pending(task)) {
0225 task->jobctl &= ~JOBCTL_TRACED;
0226 wake_up_state(task, __TASK_TRACED);
0227 }
0228 unlock_task_sighand(task, &flags);
0229 }
0230 }
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249 static int ptrace_check_attach(struct task_struct *child, bool ignore_state)
0250 {
0251 int ret = -ESRCH;
0252
0253
0254
0255
0256
0257
0258
0259
0260 read_lock(&tasklist_lock);
0261 if (child->ptrace && child->parent == current) {
0262
0263
0264
0265
0266 if (ignore_state || ptrace_freeze_traced(child))
0267 ret = 0;
0268 }
0269 read_unlock(&tasklist_lock);
0270
0271 if (!ret && !ignore_state &&
0272 WARN_ON_ONCE(!wait_task_inactive(child, __TASK_TRACED)))
0273 ret = -ESRCH;
0274
0275 return ret;
0276 }
0277
0278 static bool ptrace_has_cap(struct user_namespace *ns, unsigned int mode)
0279 {
0280 if (mode & PTRACE_MODE_NOAUDIT)
0281 return ns_capable_noaudit(ns, CAP_SYS_PTRACE);
0282 return ns_capable(ns, CAP_SYS_PTRACE);
0283 }
0284
0285
0286 static int __ptrace_may_access(struct task_struct *task, unsigned int mode)
0287 {
0288 const struct cred *cred = current_cred(), *tcred;
0289 struct mm_struct *mm;
0290 kuid_t caller_uid;
0291 kgid_t caller_gid;
0292
0293 if (!(mode & PTRACE_MODE_FSCREDS) == !(mode & PTRACE_MODE_REALCREDS)) {
0294 WARN(1, "denying ptrace access check without PTRACE_MODE_*CREDS\n");
0295 return -EPERM;
0296 }
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308 if (same_thread_group(task, current))
0309 return 0;
0310 rcu_read_lock();
0311 if (mode & PTRACE_MODE_FSCREDS) {
0312 caller_uid = cred->fsuid;
0313 caller_gid = cred->fsgid;
0314 } else {
0315
0316
0317
0318
0319
0320
0321
0322
0323 caller_uid = cred->uid;
0324 caller_gid = cred->gid;
0325 }
0326 tcred = __task_cred(task);
0327 if (uid_eq(caller_uid, tcred->euid) &&
0328 uid_eq(caller_uid, tcred->suid) &&
0329 uid_eq(caller_uid, tcred->uid) &&
0330 gid_eq(caller_gid, tcred->egid) &&
0331 gid_eq(caller_gid, tcred->sgid) &&
0332 gid_eq(caller_gid, tcred->gid))
0333 goto ok;
0334 if (ptrace_has_cap(tcred->user_ns, mode))
0335 goto ok;
0336 rcu_read_unlock();
0337 return -EPERM;
0338 ok:
0339 rcu_read_unlock();
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349 smp_rmb();
0350 mm = task->mm;
0351 if (mm &&
0352 ((get_dumpable(mm) != SUID_DUMP_USER) &&
0353 !ptrace_has_cap(mm->user_ns, mode)))
0354 return -EPERM;
0355
0356 return security_ptrace_access_check(task, mode);
0357 }
0358
0359 bool ptrace_may_access(struct task_struct *task, unsigned int mode)
0360 {
0361 int err;
0362 task_lock(task);
0363 err = __ptrace_may_access(task, mode);
0364 task_unlock(task);
0365 return !err;
0366 }
0367
0368 static int check_ptrace_options(unsigned long data)
0369 {
0370 if (data & ~(unsigned long)PTRACE_O_MASK)
0371 return -EINVAL;
0372
0373 if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) {
0374 if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) ||
0375 !IS_ENABLED(CONFIG_SECCOMP))
0376 return -EINVAL;
0377
0378 if (!capable(CAP_SYS_ADMIN))
0379 return -EPERM;
0380
0381 if (seccomp_mode(¤t->seccomp) != SECCOMP_MODE_DISABLED ||
0382 current->ptrace & PT_SUSPEND_SECCOMP)
0383 return -EPERM;
0384 }
0385 return 0;
0386 }
0387
0388 static int ptrace_attach(struct task_struct *task, long request,
0389 unsigned long addr,
0390 unsigned long flags)
0391 {
0392 bool seize = (request == PTRACE_SEIZE);
0393 int retval;
0394
0395 retval = -EIO;
0396 if (seize) {
0397 if (addr != 0)
0398 goto out;
0399
0400
0401
0402
0403
0404 if (flags & ~(unsigned long)PTRACE_O_MASK)
0405 goto out;
0406 retval = check_ptrace_options(flags);
0407 if (retval)
0408 return retval;
0409 flags = PT_PTRACED | PT_SEIZED | (flags << PT_OPT_FLAG_SHIFT);
0410 } else {
0411 flags = PT_PTRACED;
0412 }
0413
0414 audit_ptrace(task);
0415
0416 retval = -EPERM;
0417 if (unlikely(task->flags & PF_KTHREAD))
0418 goto out;
0419 if (same_thread_group(task, current))
0420 goto out;
0421
0422
0423
0424
0425
0426
0427 retval = -ERESTARTNOINTR;
0428 if (mutex_lock_interruptible(&task->signal->cred_guard_mutex))
0429 goto out;
0430
0431 task_lock(task);
0432 retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH_REALCREDS);
0433 task_unlock(task);
0434 if (retval)
0435 goto unlock_creds;
0436
0437 write_lock_irq(&tasklist_lock);
0438 retval = -EPERM;
0439 if (unlikely(task->exit_state))
0440 goto unlock_tasklist;
0441 if (task->ptrace)
0442 goto unlock_tasklist;
0443
0444 task->ptrace = flags;
0445
0446 ptrace_link(task, current);
0447
0448
0449 if (!seize)
0450 send_sig_info(SIGSTOP, SEND_SIG_PRIV, task);
0451
0452 spin_lock(&task->sighand->siglock);
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471 if (task_is_stopped(task) &&
0472 task_set_jobctl_pending(task, JOBCTL_TRAP_STOP | JOBCTL_TRAPPING)) {
0473 task->jobctl &= ~JOBCTL_STOPPED;
0474 signal_wake_up_state(task, __TASK_STOPPED);
0475 }
0476
0477 spin_unlock(&task->sighand->siglock);
0478
0479 retval = 0;
0480 unlock_tasklist:
0481 write_unlock_irq(&tasklist_lock);
0482 unlock_creds:
0483 mutex_unlock(&task->signal->cred_guard_mutex);
0484 out:
0485 if (!retval) {
0486
0487
0488
0489
0490
0491
0492
0493 wait_on_bit(&task->jobctl, JOBCTL_TRAPPING_BIT, TASK_KILLABLE);
0494 proc_ptrace_connector(task, PTRACE_ATTACH);
0495 }
0496
0497 return retval;
0498 }
0499
0500
0501
0502
0503
0504
0505
0506 static int ptrace_traceme(void)
0507 {
0508 int ret = -EPERM;
0509
0510 write_lock_irq(&tasklist_lock);
0511
0512 if (!current->ptrace) {
0513 ret = security_ptrace_traceme(current->parent);
0514
0515
0516
0517
0518
0519 if (!ret && !(current->real_parent->flags & PF_EXITING)) {
0520 current->ptrace = PT_PTRACED;
0521 ptrace_link(current, current->real_parent);
0522 }
0523 }
0524 write_unlock_irq(&tasklist_lock);
0525
0526 return ret;
0527 }
0528
0529
0530
0531
0532 static int ignoring_children(struct sighand_struct *sigh)
0533 {
0534 int ret;
0535 spin_lock(&sigh->siglock);
0536 ret = (sigh->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) ||
0537 (sigh->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT);
0538 spin_unlock(&sigh->siglock);
0539 return ret;
0540 }
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557 static bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
0558 {
0559 bool dead;
0560
0561 __ptrace_unlink(p);
0562
0563 if (p->exit_state != EXIT_ZOMBIE)
0564 return false;
0565
0566 dead = !thread_group_leader(p);
0567
0568 if (!dead && thread_group_empty(p)) {
0569 if (!same_thread_group(p->real_parent, tracer))
0570 dead = do_notify_parent(p, p->exit_signal);
0571 else if (ignoring_children(tracer->sighand)) {
0572 __wake_up_parent(p, tracer);
0573 dead = true;
0574 }
0575 }
0576
0577 if (dead)
0578 p->exit_state = EXIT_DEAD;
0579 return dead;
0580 }
0581
0582 static int ptrace_detach(struct task_struct *child, unsigned int data)
0583 {
0584 if (!valid_signal(data))
0585 return -EIO;
0586
0587
0588 ptrace_disable(child);
0589
0590 write_lock_irq(&tasklist_lock);
0591
0592
0593
0594
0595 WARN_ON(!child->ptrace || child->exit_state);
0596
0597
0598
0599
0600 child->exit_code = data;
0601 __ptrace_detach(current, child);
0602 write_unlock_irq(&tasklist_lock);
0603
0604 proc_ptrace_connector(child, PTRACE_DETACH);
0605
0606 return 0;
0607 }
0608
0609
0610
0611
0612
0613 void exit_ptrace(struct task_struct *tracer, struct list_head *dead)
0614 {
0615 struct task_struct *p, *n;
0616
0617 list_for_each_entry_safe(p, n, &tracer->ptraced, ptrace_entry) {
0618 if (unlikely(p->ptrace & PT_EXITKILL))
0619 send_sig_info(SIGKILL, SEND_SIG_PRIV, p);
0620
0621 if (__ptrace_detach(tracer, p))
0622 list_add(&p->ptrace_entry, dead);
0623 }
0624 }
0625
0626 int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
0627 {
0628 int copied = 0;
0629
0630 while (len > 0) {
0631 char buf[128];
0632 int this_len, retval;
0633
0634 this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
0635 retval = ptrace_access_vm(tsk, src, buf, this_len, FOLL_FORCE);
0636
0637 if (!retval) {
0638 if (copied)
0639 break;
0640 return -EIO;
0641 }
0642 if (copy_to_user(dst, buf, retval))
0643 return -EFAULT;
0644 copied += retval;
0645 src += retval;
0646 dst += retval;
0647 len -= retval;
0648 }
0649 return copied;
0650 }
0651
0652 int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
0653 {
0654 int copied = 0;
0655
0656 while (len > 0) {
0657 char buf[128];
0658 int this_len, retval;
0659
0660 this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
0661 if (copy_from_user(buf, src, this_len))
0662 return -EFAULT;
0663 retval = ptrace_access_vm(tsk, dst, buf, this_len,
0664 FOLL_FORCE | FOLL_WRITE);
0665 if (!retval) {
0666 if (copied)
0667 break;
0668 return -EIO;
0669 }
0670 copied += retval;
0671 src += retval;
0672 dst += retval;
0673 len -= retval;
0674 }
0675 return copied;
0676 }
0677
0678 static int ptrace_setoptions(struct task_struct *child, unsigned long data)
0679 {
0680 unsigned flags;
0681 int ret;
0682
0683 ret = check_ptrace_options(data);
0684 if (ret)
0685 return ret;
0686
0687
0688 flags = child->ptrace;
0689 flags &= ~(PTRACE_O_MASK << PT_OPT_FLAG_SHIFT);
0690 flags |= (data << PT_OPT_FLAG_SHIFT);
0691 child->ptrace = flags;
0692
0693 return 0;
0694 }
0695
0696 static int ptrace_getsiginfo(struct task_struct *child, kernel_siginfo_t *info)
0697 {
0698 unsigned long flags;
0699 int error = -ESRCH;
0700
0701 if (lock_task_sighand(child, &flags)) {
0702 error = -EINVAL;
0703 if (likely(child->last_siginfo != NULL)) {
0704 copy_siginfo(info, child->last_siginfo);
0705 error = 0;
0706 }
0707 unlock_task_sighand(child, &flags);
0708 }
0709 return error;
0710 }
0711
0712 static int ptrace_setsiginfo(struct task_struct *child, const kernel_siginfo_t *info)
0713 {
0714 unsigned long flags;
0715 int error = -ESRCH;
0716
0717 if (lock_task_sighand(child, &flags)) {
0718 error = -EINVAL;
0719 if (likely(child->last_siginfo != NULL)) {
0720 copy_siginfo(child->last_siginfo, info);
0721 error = 0;
0722 }
0723 unlock_task_sighand(child, &flags);
0724 }
0725 return error;
0726 }
0727
0728 static int ptrace_peek_siginfo(struct task_struct *child,
0729 unsigned long addr,
0730 unsigned long data)
0731 {
0732 struct ptrace_peeksiginfo_args arg;
0733 struct sigpending *pending;
0734 struct sigqueue *q;
0735 int ret, i;
0736
0737 ret = copy_from_user(&arg, (void __user *) addr,
0738 sizeof(struct ptrace_peeksiginfo_args));
0739 if (ret)
0740 return -EFAULT;
0741
0742 if (arg.flags & ~PTRACE_PEEKSIGINFO_SHARED)
0743 return -EINVAL;
0744
0745 if (arg.nr < 0)
0746 return -EINVAL;
0747
0748
0749 if (arg.off > ULONG_MAX)
0750 return 0;
0751
0752 if (arg.flags & PTRACE_PEEKSIGINFO_SHARED)
0753 pending = &child->signal->shared_pending;
0754 else
0755 pending = &child->pending;
0756
0757 for (i = 0; i < arg.nr; ) {
0758 kernel_siginfo_t info;
0759 unsigned long off = arg.off + i;
0760 bool found = false;
0761
0762 spin_lock_irq(&child->sighand->siglock);
0763 list_for_each_entry(q, &pending->list, list) {
0764 if (!off--) {
0765 found = true;
0766 copy_siginfo(&info, &q->info);
0767 break;
0768 }
0769 }
0770 spin_unlock_irq(&child->sighand->siglock);
0771
0772 if (!found)
0773 break;
0774
0775 #ifdef CONFIG_COMPAT
0776 if (unlikely(in_compat_syscall())) {
0777 compat_siginfo_t __user *uinfo = compat_ptr(data);
0778
0779 if (copy_siginfo_to_user32(uinfo, &info)) {
0780 ret = -EFAULT;
0781 break;
0782 }
0783
0784 } else
0785 #endif
0786 {
0787 siginfo_t __user *uinfo = (siginfo_t __user *) data;
0788
0789 if (copy_siginfo_to_user(uinfo, &info)) {
0790 ret = -EFAULT;
0791 break;
0792 }
0793 }
0794
0795 data += sizeof(siginfo_t);
0796 i++;
0797
0798 if (signal_pending(current))
0799 break;
0800
0801 cond_resched();
0802 }
0803
0804 if (i > 0)
0805 return i;
0806
0807 return ret;
0808 }
0809
0810 #ifdef CONFIG_RSEQ
0811 static long ptrace_get_rseq_configuration(struct task_struct *task,
0812 unsigned long size, void __user *data)
0813 {
0814 struct ptrace_rseq_configuration conf = {
0815 .rseq_abi_pointer = (u64)(uintptr_t)task->rseq,
0816 .rseq_abi_size = sizeof(*task->rseq),
0817 .signature = task->rseq_sig,
0818 .flags = 0,
0819 };
0820
0821 size = min_t(unsigned long, size, sizeof(conf));
0822 if (copy_to_user(data, &conf, size))
0823 return -EFAULT;
0824 return sizeof(conf);
0825 }
0826 #endif
0827
0828 #define is_singlestep(request) ((request) == PTRACE_SINGLESTEP)
0829
0830 #ifdef PTRACE_SINGLEBLOCK
0831 #define is_singleblock(request) ((request) == PTRACE_SINGLEBLOCK)
0832 #else
0833 #define is_singleblock(request) 0
0834 #endif
0835
0836 #ifdef PTRACE_SYSEMU
0837 #define is_sysemu_singlestep(request) ((request) == PTRACE_SYSEMU_SINGLESTEP)
0838 #else
0839 #define is_sysemu_singlestep(request) 0
0840 #endif
0841
0842 static int ptrace_resume(struct task_struct *child, long request,
0843 unsigned long data)
0844 {
0845 if (!valid_signal(data))
0846 return -EIO;
0847
0848 if (request == PTRACE_SYSCALL)
0849 set_task_syscall_work(child, SYSCALL_TRACE);
0850 else
0851 clear_task_syscall_work(child, SYSCALL_TRACE);
0852
0853 #if defined(CONFIG_GENERIC_ENTRY) || defined(TIF_SYSCALL_EMU)
0854 if (request == PTRACE_SYSEMU || request == PTRACE_SYSEMU_SINGLESTEP)
0855 set_task_syscall_work(child, SYSCALL_EMU);
0856 else
0857 clear_task_syscall_work(child, SYSCALL_EMU);
0858 #endif
0859
0860 if (is_singleblock(request)) {
0861 if (unlikely(!arch_has_block_step()))
0862 return -EIO;
0863 user_enable_block_step(child);
0864 } else if (is_singlestep(request) || is_sysemu_singlestep(request)) {
0865 if (unlikely(!arch_has_single_step()))
0866 return -EIO;
0867 user_enable_single_step(child);
0868 } else {
0869 user_disable_single_step(child);
0870 }
0871
0872
0873
0874
0875
0876
0877
0878
0879
0880
0881 spin_lock_irq(&child->sighand->siglock);
0882 child->exit_code = data;
0883 child->jobctl &= ~JOBCTL_TRACED;
0884 wake_up_state(child, __TASK_TRACED);
0885 spin_unlock_irq(&child->sighand->siglock);
0886
0887 return 0;
0888 }
0889
0890 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
0891
0892 static const struct user_regset *
0893 find_regset(const struct user_regset_view *view, unsigned int type)
0894 {
0895 const struct user_regset *regset;
0896 int n;
0897
0898 for (n = 0; n < view->n; ++n) {
0899 regset = view->regsets + n;
0900 if (regset->core_note_type == type)
0901 return regset;
0902 }
0903
0904 return NULL;
0905 }
0906
0907 static int ptrace_regset(struct task_struct *task, int req, unsigned int type,
0908 struct iovec *kiov)
0909 {
0910 const struct user_regset_view *view = task_user_regset_view(task);
0911 const struct user_regset *regset = find_regset(view, type);
0912 int regset_no;
0913
0914 if (!regset || (kiov->iov_len % regset->size) != 0)
0915 return -EINVAL;
0916
0917 regset_no = regset - view->regsets;
0918 kiov->iov_len = min(kiov->iov_len,
0919 (__kernel_size_t) (regset->n * regset->size));
0920
0921 if (req == PTRACE_GETREGSET)
0922 return copy_regset_to_user(task, view, regset_no, 0,
0923 kiov->iov_len, kiov->iov_base);
0924 else
0925 return copy_regset_from_user(task, view, regset_no, 0,
0926 kiov->iov_len, kiov->iov_base);
0927 }
0928
0929
0930
0931
0932
0933
0934 EXPORT_SYMBOL_GPL(task_user_regset_view);
0935
0936 static unsigned long
0937 ptrace_get_syscall_info_entry(struct task_struct *child, struct pt_regs *regs,
0938 struct ptrace_syscall_info *info)
0939 {
0940 unsigned long args[ARRAY_SIZE(info->entry.args)];
0941 int i;
0942
0943 info->op = PTRACE_SYSCALL_INFO_ENTRY;
0944 info->entry.nr = syscall_get_nr(child, regs);
0945 syscall_get_arguments(child, regs, args);
0946 for (i = 0; i < ARRAY_SIZE(args); i++)
0947 info->entry.args[i] = args[i];
0948
0949
0950 return offsetofend(struct ptrace_syscall_info, entry.args);
0951 }
0952
0953 static unsigned long
0954 ptrace_get_syscall_info_seccomp(struct task_struct *child, struct pt_regs *regs,
0955 struct ptrace_syscall_info *info)
0956 {
0957
0958
0959
0960
0961
0962
0963
0964 ptrace_get_syscall_info_entry(child, regs, info);
0965 info->op = PTRACE_SYSCALL_INFO_SECCOMP;
0966 info->seccomp.ret_data = child->ptrace_message;
0967
0968
0969 return offsetofend(struct ptrace_syscall_info, seccomp.ret_data);
0970 }
0971
0972 static unsigned long
0973 ptrace_get_syscall_info_exit(struct task_struct *child, struct pt_regs *regs,
0974 struct ptrace_syscall_info *info)
0975 {
0976 info->op = PTRACE_SYSCALL_INFO_EXIT;
0977 info->exit.rval = syscall_get_error(child, regs);
0978 info->exit.is_error = !!info->exit.rval;
0979 if (!info->exit.is_error)
0980 info->exit.rval = syscall_get_return_value(child, regs);
0981
0982
0983 return offsetofend(struct ptrace_syscall_info, exit.is_error);
0984 }
0985
0986 static int
0987 ptrace_get_syscall_info(struct task_struct *child, unsigned long user_size,
0988 void __user *datavp)
0989 {
0990 struct pt_regs *regs = task_pt_regs(child);
0991 struct ptrace_syscall_info info = {
0992 .op = PTRACE_SYSCALL_INFO_NONE,
0993 .arch = syscall_get_arch(child),
0994 .instruction_pointer = instruction_pointer(regs),
0995 .stack_pointer = user_stack_pointer(regs),
0996 };
0997 unsigned long actual_size = offsetof(struct ptrace_syscall_info, entry);
0998 unsigned long write_size;
0999
1000
1001
1002
1003
1004
1005
1006 switch (child->last_siginfo ? child->last_siginfo->si_code : 0) {
1007 case SIGTRAP | 0x80:
1008 switch (child->ptrace_message) {
1009 case PTRACE_EVENTMSG_SYSCALL_ENTRY:
1010 actual_size = ptrace_get_syscall_info_entry(child, regs,
1011 &info);
1012 break;
1013 case PTRACE_EVENTMSG_SYSCALL_EXIT:
1014 actual_size = ptrace_get_syscall_info_exit(child, regs,
1015 &info);
1016 break;
1017 }
1018 break;
1019 case SIGTRAP | (PTRACE_EVENT_SECCOMP << 8):
1020 actual_size = ptrace_get_syscall_info_seccomp(child, regs,
1021 &info);
1022 break;
1023 }
1024
1025 write_size = min(actual_size, user_size);
1026 return copy_to_user(datavp, &info, write_size) ? -EFAULT : actual_size;
1027 }
1028 #endif
1029
1030 int ptrace_request(struct task_struct *child, long request,
1031 unsigned long addr, unsigned long data)
1032 {
1033 bool seized = child->ptrace & PT_SEIZED;
1034 int ret = -EIO;
1035 kernel_siginfo_t siginfo, *si;
1036 void __user *datavp = (void __user *) data;
1037 unsigned long __user *datalp = datavp;
1038 unsigned long flags;
1039
1040 switch (request) {
1041 case PTRACE_PEEKTEXT:
1042 case PTRACE_PEEKDATA:
1043 return generic_ptrace_peekdata(child, addr, data);
1044 case PTRACE_POKETEXT:
1045 case PTRACE_POKEDATA:
1046 return generic_ptrace_pokedata(child, addr, data);
1047
1048 #ifdef PTRACE_OLDSETOPTIONS
1049 case PTRACE_OLDSETOPTIONS:
1050 #endif
1051 case PTRACE_SETOPTIONS:
1052 ret = ptrace_setoptions(child, data);
1053 break;
1054 case PTRACE_GETEVENTMSG:
1055 ret = put_user(child->ptrace_message, datalp);
1056 break;
1057
1058 case PTRACE_PEEKSIGINFO:
1059 ret = ptrace_peek_siginfo(child, addr, data);
1060 break;
1061
1062 case PTRACE_GETSIGINFO:
1063 ret = ptrace_getsiginfo(child, &siginfo);
1064 if (!ret)
1065 ret = copy_siginfo_to_user(datavp, &siginfo);
1066 break;
1067
1068 case PTRACE_SETSIGINFO:
1069 ret = copy_siginfo_from_user(&siginfo, datavp);
1070 if (!ret)
1071 ret = ptrace_setsiginfo(child, &siginfo);
1072 break;
1073
1074 case PTRACE_GETSIGMASK: {
1075 sigset_t *mask;
1076
1077 if (addr != sizeof(sigset_t)) {
1078 ret = -EINVAL;
1079 break;
1080 }
1081
1082 if (test_tsk_restore_sigmask(child))
1083 mask = &child->saved_sigmask;
1084 else
1085 mask = &child->blocked;
1086
1087 if (copy_to_user(datavp, mask, sizeof(sigset_t)))
1088 ret = -EFAULT;
1089 else
1090 ret = 0;
1091
1092 break;
1093 }
1094
1095 case PTRACE_SETSIGMASK: {
1096 sigset_t new_set;
1097
1098 if (addr != sizeof(sigset_t)) {
1099 ret = -EINVAL;
1100 break;
1101 }
1102
1103 if (copy_from_user(&new_set, datavp, sizeof(sigset_t))) {
1104 ret = -EFAULT;
1105 break;
1106 }
1107
1108 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
1109
1110
1111
1112
1113
1114
1115 spin_lock_irq(&child->sighand->siglock);
1116 child->blocked = new_set;
1117 spin_unlock_irq(&child->sighand->siglock);
1118
1119 clear_tsk_restore_sigmask(child);
1120
1121 ret = 0;
1122 break;
1123 }
1124
1125 case PTRACE_INTERRUPT:
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136 if (unlikely(!seized || !lock_task_sighand(child, &flags)))
1137 break;
1138
1139
1140
1141
1142
1143
1144
1145 if (likely(task_set_jobctl_pending(child, JOBCTL_TRAP_STOP)))
1146 ptrace_signal_wake_up(child, child->jobctl & JOBCTL_LISTENING);
1147
1148 unlock_task_sighand(child, &flags);
1149 ret = 0;
1150 break;
1151
1152 case PTRACE_LISTEN:
1153
1154
1155
1156
1157
1158
1159
1160
1161 if (unlikely(!seized || !lock_task_sighand(child, &flags)))
1162 break;
1163
1164 si = child->last_siginfo;
1165 if (likely(si && (si->si_code >> 8) == PTRACE_EVENT_STOP)) {
1166 child->jobctl |= JOBCTL_LISTENING;
1167
1168
1169
1170
1171 if (child->jobctl & JOBCTL_TRAP_NOTIFY)
1172 ptrace_signal_wake_up(child, true);
1173 ret = 0;
1174 }
1175 unlock_task_sighand(child, &flags);
1176 break;
1177
1178 case PTRACE_DETACH:
1179 ret = ptrace_detach(child, data);
1180 break;
1181
1182 #ifdef CONFIG_BINFMT_ELF_FDPIC
1183 case PTRACE_GETFDPIC: {
1184 struct mm_struct *mm = get_task_mm(child);
1185 unsigned long tmp = 0;
1186
1187 ret = -ESRCH;
1188 if (!mm)
1189 break;
1190
1191 switch (addr) {
1192 case PTRACE_GETFDPIC_EXEC:
1193 tmp = mm->context.exec_fdpic_loadmap;
1194 break;
1195 case PTRACE_GETFDPIC_INTERP:
1196 tmp = mm->context.interp_fdpic_loadmap;
1197 break;
1198 default:
1199 break;
1200 }
1201 mmput(mm);
1202
1203 ret = put_user(tmp, datalp);
1204 break;
1205 }
1206 #endif
1207
1208 case PTRACE_SINGLESTEP:
1209 #ifdef PTRACE_SINGLEBLOCK
1210 case PTRACE_SINGLEBLOCK:
1211 #endif
1212 #ifdef PTRACE_SYSEMU
1213 case PTRACE_SYSEMU:
1214 case PTRACE_SYSEMU_SINGLESTEP:
1215 #endif
1216 case PTRACE_SYSCALL:
1217 case PTRACE_CONT:
1218 return ptrace_resume(child, request, data);
1219
1220 case PTRACE_KILL:
1221 send_sig_info(SIGKILL, SEND_SIG_NOINFO, child);
1222 return 0;
1223
1224 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
1225 case PTRACE_GETREGSET:
1226 case PTRACE_SETREGSET: {
1227 struct iovec kiov;
1228 struct iovec __user *uiov = datavp;
1229
1230 if (!access_ok(uiov, sizeof(*uiov)))
1231 return -EFAULT;
1232
1233 if (__get_user(kiov.iov_base, &uiov->iov_base) ||
1234 __get_user(kiov.iov_len, &uiov->iov_len))
1235 return -EFAULT;
1236
1237 ret = ptrace_regset(child, request, addr, &kiov);
1238 if (!ret)
1239 ret = __put_user(kiov.iov_len, &uiov->iov_len);
1240 break;
1241 }
1242
1243 case PTRACE_GET_SYSCALL_INFO:
1244 ret = ptrace_get_syscall_info(child, addr, datavp);
1245 break;
1246 #endif
1247
1248 case PTRACE_SECCOMP_GET_FILTER:
1249 ret = seccomp_get_filter(child, addr, datavp);
1250 break;
1251
1252 case PTRACE_SECCOMP_GET_METADATA:
1253 ret = seccomp_get_metadata(child, addr, datavp);
1254 break;
1255
1256 #ifdef CONFIG_RSEQ
1257 case PTRACE_GET_RSEQ_CONFIGURATION:
1258 ret = ptrace_get_rseq_configuration(child, addr, datavp);
1259 break;
1260 #endif
1261
1262 default:
1263 break;
1264 }
1265
1266 return ret;
1267 }
1268
1269 SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
1270 unsigned long, data)
1271 {
1272 struct task_struct *child;
1273 long ret;
1274
1275 if (request == PTRACE_TRACEME) {
1276 ret = ptrace_traceme();
1277 goto out;
1278 }
1279
1280 child = find_get_task_by_vpid(pid);
1281 if (!child) {
1282 ret = -ESRCH;
1283 goto out;
1284 }
1285
1286 if (request == PTRACE_ATTACH || request == PTRACE_SEIZE) {
1287 ret = ptrace_attach(child, request, addr, data);
1288 goto out_put_task_struct;
1289 }
1290
1291 ret = ptrace_check_attach(child, request == PTRACE_KILL ||
1292 request == PTRACE_INTERRUPT);
1293 if (ret < 0)
1294 goto out_put_task_struct;
1295
1296 ret = arch_ptrace(child, request, addr, data);
1297 if (ret || request != PTRACE_DETACH)
1298 ptrace_unfreeze_traced(child);
1299
1300 out_put_task_struct:
1301 put_task_struct(child);
1302 out:
1303 return ret;
1304 }
1305
1306 int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
1307 unsigned long data)
1308 {
1309 unsigned long tmp;
1310 int copied;
1311
1312 copied = ptrace_access_vm(tsk, addr, &tmp, sizeof(tmp), FOLL_FORCE);
1313 if (copied != sizeof(tmp))
1314 return -EIO;
1315 return put_user(tmp, (unsigned long __user *)data);
1316 }
1317
1318 int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
1319 unsigned long data)
1320 {
1321 int copied;
1322
1323 copied = ptrace_access_vm(tsk, addr, &data, sizeof(data),
1324 FOLL_FORCE | FOLL_WRITE);
1325 return (copied == sizeof(data)) ? 0 : -EIO;
1326 }
1327
1328 #if defined CONFIG_COMPAT
1329
1330 int compat_ptrace_request(struct task_struct *child, compat_long_t request,
1331 compat_ulong_t addr, compat_ulong_t data)
1332 {
1333 compat_ulong_t __user *datap = compat_ptr(data);
1334 compat_ulong_t word;
1335 kernel_siginfo_t siginfo;
1336 int ret;
1337
1338 switch (request) {
1339 case PTRACE_PEEKTEXT:
1340 case PTRACE_PEEKDATA:
1341 ret = ptrace_access_vm(child, addr, &word, sizeof(word),
1342 FOLL_FORCE);
1343 if (ret != sizeof(word))
1344 ret = -EIO;
1345 else
1346 ret = put_user(word, datap);
1347 break;
1348
1349 case PTRACE_POKETEXT:
1350 case PTRACE_POKEDATA:
1351 ret = ptrace_access_vm(child, addr, &data, sizeof(data),
1352 FOLL_FORCE | FOLL_WRITE);
1353 ret = (ret != sizeof(data) ? -EIO : 0);
1354 break;
1355
1356 case PTRACE_GETEVENTMSG:
1357 ret = put_user((compat_ulong_t) child->ptrace_message, datap);
1358 break;
1359
1360 case PTRACE_GETSIGINFO:
1361 ret = ptrace_getsiginfo(child, &siginfo);
1362 if (!ret)
1363 ret = copy_siginfo_to_user32(
1364 (struct compat_siginfo __user *) datap,
1365 &siginfo);
1366 break;
1367
1368 case PTRACE_SETSIGINFO:
1369 ret = copy_siginfo_from_user32(
1370 &siginfo, (struct compat_siginfo __user *) datap);
1371 if (!ret)
1372 ret = ptrace_setsiginfo(child, &siginfo);
1373 break;
1374 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
1375 case PTRACE_GETREGSET:
1376 case PTRACE_SETREGSET:
1377 {
1378 struct iovec kiov;
1379 struct compat_iovec __user *uiov =
1380 (struct compat_iovec __user *) datap;
1381 compat_uptr_t ptr;
1382 compat_size_t len;
1383
1384 if (!access_ok(uiov, sizeof(*uiov)))
1385 return -EFAULT;
1386
1387 if (__get_user(ptr, &uiov->iov_base) ||
1388 __get_user(len, &uiov->iov_len))
1389 return -EFAULT;
1390
1391 kiov.iov_base = compat_ptr(ptr);
1392 kiov.iov_len = len;
1393
1394 ret = ptrace_regset(child, request, addr, &kiov);
1395 if (!ret)
1396 ret = __put_user(kiov.iov_len, &uiov->iov_len);
1397 break;
1398 }
1399 #endif
1400
1401 default:
1402 ret = ptrace_request(child, request, addr, data);
1403 }
1404
1405 return ret;
1406 }
1407
1408 COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
1409 compat_long_t, addr, compat_long_t, data)
1410 {
1411 struct task_struct *child;
1412 long ret;
1413
1414 if (request == PTRACE_TRACEME) {
1415 ret = ptrace_traceme();
1416 goto out;
1417 }
1418
1419 child = find_get_task_by_vpid(pid);
1420 if (!child) {
1421 ret = -ESRCH;
1422 goto out;
1423 }
1424
1425 if (request == PTRACE_ATTACH || request == PTRACE_SEIZE) {
1426 ret = ptrace_attach(child, request, addr, data);
1427 goto out_put_task_struct;
1428 }
1429
1430 ret = ptrace_check_attach(child, request == PTRACE_KILL ||
1431 request == PTRACE_INTERRUPT);
1432 if (!ret) {
1433 ret = compat_arch_ptrace(child, request, addr, data);
1434 if (ret || request != PTRACE_DETACH)
1435 ptrace_unfreeze_traced(child);
1436 }
1437
1438 out_put_task_struct:
1439 put_task_struct(child);
1440 out:
1441 return ret;
1442 }
1443 #endif