ptrace: do not audit capability check when outputing /proc/pid/stat
[pandora-kernel.git] / kernel / ptrace.c
1 /*
2  * linux/kernel/ptrace.c
3  *
4  * (C) Copyright 1999 Linus Torvalds
5  *
6  * Common interfaces for "ptrace()" which we do not want
7  * to continually duplicate across every architecture.
8  */
9
10 #include <linux/capability.h>
11 #include <linux/module.h>
12 #include <linux/sched.h>
13 #include <linux/errno.h>
14 #include <linux/mm.h>
15 #include <linux/highmem.h>
16 #include <linux/pagemap.h>
17 #include <linux/ptrace.h>
18 #include <linux/security.h>
19 #include <linux/signal.h>
20 #include <linux/audit.h>
21 #include <linux/pid_namespace.h>
22 #include <linux/syscalls.h>
23 #include <linux/uaccess.h>
24 #include <linux/regset.h>
25 #include <linux/hw_breakpoint.h>
26 #include <linux/cn_proc.h>
27
28
29 static int ptrace_trapping_sleep_fn(void *flags)
30 {
31         schedule();
32         return 0;
33 }
34
35 /*
36  * ptrace a task: make the debugger its new parent and
37  * move it to the ptrace list.
38  *
39  * Must be called with the tasklist lock write-held.
40  */
41 void __ptrace_link(struct task_struct *child, struct task_struct *new_parent)
42 {
43         BUG_ON(!list_empty(&child->ptrace_entry));
44         list_add(&child->ptrace_entry, &new_parent->ptraced);
45         child->parent = new_parent;
46 }
47
48 /**
49  * __ptrace_unlink - unlink ptracee and restore its execution state
50  * @child: ptracee to be unlinked
51  *
52  * Remove @child from the ptrace list, move it back to the original parent,
53  * and restore the execution state so that it conforms to the group stop
54  * state.
55  *
56  * Unlinking can happen via two paths - explicit PTRACE_DETACH or ptracer
57  * exiting.  For PTRACE_DETACH, unless the ptracee has been killed between
58  * ptrace_check_attach() and here, it's guaranteed to be in TASK_TRACED.
59  * If the ptracer is exiting, the ptracee can be in any state.
60  *
61  * After detach, the ptracee should be in a state which conforms to the
62  * group stop.  If the group is stopped or in the process of stopping, the
63  * ptracee should be put into TASK_STOPPED; otherwise, it should be woken
64  * up from TASK_TRACED.
65  *
66  * If the ptracee is in TASK_TRACED and needs to be moved to TASK_STOPPED,
67  * it goes through TRACED -> RUNNING -> STOPPED transition which is similar
68  * to but in the opposite direction of what happens while attaching to a
69  * stopped task.  However, in this direction, the intermediate RUNNING
70  * state is not hidden even from the current ptracer and if it immediately
71  * re-attaches and performs a WNOHANG wait(2), it may fail.
72  *
73  * CONTEXT:
74  * write_lock_irq(tasklist_lock)
75  */
76 void __ptrace_unlink(struct task_struct *child)
77 {
78         BUG_ON(!child->ptrace);
79
80         child->ptrace = 0;
81         child->parent = child->real_parent;
82         list_del_init(&child->ptrace_entry);
83
84         spin_lock(&child->sighand->siglock);
85
86         /*
87          * Clear all pending traps and TRAPPING.  TRAPPING should be
88          * cleared regardless of JOBCTL_STOP_PENDING.  Do it explicitly.
89          */
90         task_clear_jobctl_pending(child, JOBCTL_TRAP_MASK);
91         task_clear_jobctl_trapping(child);
92
93         /*
94          * Reinstate JOBCTL_STOP_PENDING if group stop is in effect and
95          * @child isn't dead.
96          */
97         if (!(child->flags & PF_EXITING) &&
98             (child->signal->flags & SIGNAL_STOP_STOPPED ||
99              child->signal->group_stop_count))
100                 child->jobctl |= JOBCTL_STOP_PENDING;
101
102         /*
103          * If transition to TASK_STOPPED is pending or in TASK_TRACED, kick
104          * @child in the butt.  Note that @resume should be used iff @child
105          * is in TASK_TRACED; otherwise, we might unduly disrupt
106          * TASK_KILLABLE sleeps.
107          */
108         if (child->jobctl & JOBCTL_STOP_PENDING || task_is_traced(child))
109                 signal_wake_up(child, task_is_traced(child));
110
111         spin_unlock(&child->sighand->siglock);
112 }
113
114 /**
115  * ptrace_check_attach - check whether ptracee is ready for ptrace operation
116  * @child: ptracee to check for
117  * @ignore_state: don't check whether @child is currently %TASK_TRACED
118  *
119  * Check whether @child is being ptraced by %current and ready for further
120  * ptrace operations.  If @ignore_state is %false, @child also should be in
121  * %TASK_TRACED state and on return the child is guaranteed to be traced
122  * and not executing.  If @ignore_state is %true, @child can be in any
123  * state.
124  *
125  * CONTEXT:
126  * Grabs and releases tasklist_lock and @child->sighand->siglock.
127  *
128  * RETURNS:
129  * 0 on success, -ESRCH if %child is not ready.
130  */
131 int ptrace_check_attach(struct task_struct *child, bool ignore_state)
132 {
133         int ret = -ESRCH;
134
135         /*
136          * We take the read lock around doing both checks to close a
137          * possible race where someone else was tracing our child and
138          * detached between these two checks.  After this locked check,
139          * we are sure that this is our traced child and that can only
140          * be changed by us so it's not changing right after this.
141          */
142         read_lock(&tasklist_lock);
143         if ((child->ptrace & PT_PTRACED) && child->parent == current) {
144                 /*
145                  * child->sighand can't be NULL, release_task()
146                  * does ptrace_unlink() before __exit_signal().
147                  */
148                 spin_lock_irq(&child->sighand->siglock);
149                 WARN_ON_ONCE(task_is_stopped(child));
150                 if (ignore_state || (task_is_traced(child) &&
151                                      !(child->jobctl & JOBCTL_LISTENING)))
152                         ret = 0;
153                 spin_unlock_irq(&child->sighand->siglock);
154         }
155         read_unlock(&tasklist_lock);
156
157         if (!ret && !ignore_state)
158                 ret = wait_task_inactive(child, TASK_TRACED) ? 0 : -ESRCH;
159
160         /* All systems go.. */
161         return ret;
162 }
163
164 static int ptrace_has_cap(struct user_namespace *ns, unsigned int mode)
165 {
166         if (mode & PTRACE_MODE_NOAUDIT)
167                 return has_ns_capability_noaudit(current, ns, CAP_SYS_PTRACE);
168         else
169                 return has_ns_capability(current, ns, CAP_SYS_PTRACE);
170 }
171
172 int __ptrace_may_access(struct task_struct *task, unsigned int mode)
173 {
174         const struct cred *cred = current_cred(), *tcred;
175
176         /* May we inspect the given task?
177          * This check is used both for attaching with ptrace
178          * and for allowing access to sensitive information in /proc.
179          *
180          * ptrace_attach denies several cases that /proc allows
181          * because setting up the necessary parent/child relationship
182          * or halting the specified task is impossible.
183          */
184         int dumpable = 0;
185         /* Don't let security modules deny introspection */
186         if (task == current)
187                 return 0;
188         rcu_read_lock();
189         tcred = __task_cred(task);
190         if (cred->user->user_ns == tcred->user->user_ns &&
191             (cred->uid == tcred->euid &&
192              cred->uid == tcred->suid &&
193              cred->uid == tcred->uid  &&
194              cred->gid == tcred->egid &&
195              cred->gid == tcred->sgid &&
196              cred->gid == tcred->gid))
197                 goto ok;
198         if (ptrace_has_cap(tcred->user->user_ns, mode))
199                 goto ok;
200         rcu_read_unlock();
201         return -EPERM;
202 ok:
203         rcu_read_unlock();
204         smp_rmb();
205         if (task->mm)
206                 dumpable = get_dumpable(task->mm);
207         if (!dumpable  && !ptrace_has_cap(task_user_ns(task), mode))
208                 return -EPERM;
209
210         return security_ptrace_access_check(task, mode);
211 }
212
213 bool ptrace_may_access(struct task_struct *task, unsigned int mode)
214 {
215         int err;
216         task_lock(task);
217         err = __ptrace_may_access(task, mode);
218         task_unlock(task);
219         return !err;
220 }
221
222 static int ptrace_attach(struct task_struct *task, long request,
223                          unsigned long flags)
224 {
225         bool seize = (request == PTRACE_SEIZE);
226         int retval;
227
228         /*
229          * SEIZE will enable new ptrace behaviors which will be implemented
230          * gradually.  SEIZE_DEVEL is used to prevent applications
231          * expecting full SEIZE behaviors trapping on kernel commits which
232          * are still in the process of implementing them.
233          *
234          * Only test programs for new ptrace behaviors being implemented
235          * should set SEIZE_DEVEL.  If unset, SEIZE will fail with -EIO.
236          *
237          * Once SEIZE behaviors are completely implemented, this flag and
238          * the following test will be removed.
239          */
240         retval = -EIO;
241         if (seize && !(flags & PTRACE_SEIZE_DEVEL))
242                 goto out;
243
244         audit_ptrace(task);
245
246         retval = -EPERM;
247         if (unlikely(task->flags & PF_KTHREAD))
248                 goto out;
249         if (same_thread_group(task, current))
250                 goto out;
251
252         /*
253          * Protect exec's credential calculations against our interference;
254          * interference; SUID, SGID and LSM creds get determined differently
255          * under ptrace.
256          */
257         retval = -ERESTARTNOINTR;
258         if (mutex_lock_interruptible(&task->signal->cred_guard_mutex))
259                 goto out;
260
261         task_lock(task);
262         retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH);
263         task_unlock(task);
264         if (retval)
265                 goto unlock_creds;
266
267         write_lock_irq(&tasklist_lock);
268         retval = -EPERM;
269         if (unlikely(task->exit_state))
270                 goto unlock_tasklist;
271         if (task->ptrace)
272                 goto unlock_tasklist;
273
274         task->ptrace = PT_PTRACED;
275         if (seize)
276                 task->ptrace |= PT_SEIZED;
277         if (ns_capable(task_user_ns(task), CAP_SYS_PTRACE))
278                 task->ptrace |= PT_PTRACE_CAP;
279
280         __ptrace_link(task, current);
281
282         /* SEIZE doesn't trap tracee on attach */
283         if (!seize)
284                 send_sig_info(SIGSTOP, SEND_SIG_FORCED, task);
285
286         spin_lock(&task->sighand->siglock);
287
288         /*
289          * If the task is already STOPPED, set JOBCTL_TRAP_STOP and
290          * TRAPPING, and kick it so that it transits to TRACED.  TRAPPING
291          * will be cleared if the child completes the transition or any
292          * event which clears the group stop states happens.  We'll wait
293          * for the transition to complete before returning from this
294          * function.
295          *
296          * This hides STOPPED -> RUNNING -> TRACED transition from the
297          * attaching thread but a different thread in the same group can
298          * still observe the transient RUNNING state.  IOW, if another
299          * thread's WNOHANG wait(2) on the stopped tracee races against
300          * ATTACH, the wait(2) may fail due to the transient RUNNING.
301          *
302          * The following task_is_stopped() test is safe as both transitions
303          * in and out of STOPPED are protected by siglock.
304          */
305         if (task_is_stopped(task) &&
306             task_set_jobctl_pending(task, JOBCTL_TRAP_STOP | JOBCTL_TRAPPING))
307                 signal_wake_up(task, 1);
308
309         spin_unlock(&task->sighand->siglock);
310
311         retval = 0;
312 unlock_tasklist:
313         write_unlock_irq(&tasklist_lock);
314 unlock_creds:
315         mutex_unlock(&task->signal->cred_guard_mutex);
316 out:
317         if (!retval) {
318                 wait_on_bit(&task->jobctl, JOBCTL_TRAPPING_BIT,
319                             ptrace_trapping_sleep_fn, TASK_UNINTERRUPTIBLE);
320                 proc_ptrace_connector(task, PTRACE_ATTACH);
321         }
322
323         return retval;
324 }
325
326 /**
327  * ptrace_traceme  --  helper for PTRACE_TRACEME
328  *
329  * Performs checks and sets PT_PTRACED.
330  * Should be used by all ptrace implementations for PTRACE_TRACEME.
331  */
332 static int ptrace_traceme(void)
333 {
334         int ret = -EPERM;
335
336         write_lock_irq(&tasklist_lock);
337         /* Are we already being traced? */
338         if (!current->ptrace) {
339                 ret = security_ptrace_traceme(current->parent);
340                 /*
341                  * Check PF_EXITING to ensure ->real_parent has not passed
342                  * exit_ptrace(). Otherwise we don't report the error but
343                  * pretend ->real_parent untraces us right after return.
344                  */
345                 if (!ret && !(current->real_parent->flags & PF_EXITING)) {
346                         current->ptrace = PT_PTRACED;
347                         __ptrace_link(current, current->real_parent);
348                 }
349         }
350         write_unlock_irq(&tasklist_lock);
351
352         return ret;
353 }
354
355 /*
356  * Called with irqs disabled, returns true if childs should reap themselves.
357  */
358 static int ignoring_children(struct sighand_struct *sigh)
359 {
360         int ret;
361         spin_lock(&sigh->siglock);
362         ret = (sigh->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) ||
363               (sigh->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT);
364         spin_unlock(&sigh->siglock);
365         return ret;
366 }
367
368 /*
369  * Called with tasklist_lock held for writing.
370  * Unlink a traced task, and clean it up if it was a traced zombie.
371  * Return true if it needs to be reaped with release_task().
372  * (We can't call release_task() here because we already hold tasklist_lock.)
373  *
374  * If it's a zombie, our attachedness prevented normal parent notification
375  * or self-reaping.  Do notification now if it would have happened earlier.
376  * If it should reap itself, return true.
377  *
378  * If it's our own child, there is no notification to do. But if our normal
379  * children self-reap, then this child was prevented by ptrace and we must
380  * reap it now, in that case we must also wake up sub-threads sleeping in
381  * do_wait().
382  */
383 static bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
384 {
385         bool dead;
386
387         __ptrace_unlink(p);
388
389         if (p->exit_state != EXIT_ZOMBIE)
390                 return false;
391
392         dead = !thread_group_leader(p);
393
394         if (!dead && thread_group_empty(p)) {
395                 if (!same_thread_group(p->real_parent, tracer))
396                         dead = do_notify_parent(p, p->exit_signal);
397                 else if (ignoring_children(tracer->sighand)) {
398                         __wake_up_parent(p, tracer);
399                         dead = true;
400                 }
401         }
402         /* Mark it as in the process of being reaped. */
403         if (dead)
404                 p->exit_state = EXIT_DEAD;
405         return dead;
406 }
407
408 static int ptrace_detach(struct task_struct *child, unsigned int data)
409 {
410         bool dead = false;
411
412         if (!valid_signal(data))
413                 return -EIO;
414
415         /* Architecture-specific hardware disable .. */
416         ptrace_disable(child);
417         clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
418
419         write_lock_irq(&tasklist_lock);
420         /*
421          * This child can be already killed. Make sure de_thread() or
422          * our sub-thread doing do_wait() didn't do release_task() yet.
423          */
424         if (child->ptrace) {
425                 child->exit_code = data;
426                 dead = __ptrace_detach(current, child);
427         }
428         write_unlock_irq(&tasklist_lock);
429
430         proc_ptrace_connector(child, PTRACE_DETACH);
431         if (unlikely(dead))
432                 release_task(child);
433
434         return 0;
435 }
436
437 /*
438  * Detach all tasks we were using ptrace on. Called with tasklist held
439  * for writing, and returns with it held too. But note it can release
440  * and reacquire the lock.
441  */
442 void exit_ptrace(struct task_struct *tracer)
443         __releases(&tasklist_lock)
444         __acquires(&tasklist_lock)
445 {
446         struct task_struct *p, *n;
447         LIST_HEAD(ptrace_dead);
448
449         if (likely(list_empty(&tracer->ptraced)))
450                 return;
451
452         list_for_each_entry_safe(p, n, &tracer->ptraced, ptrace_entry) {
453                 if (__ptrace_detach(tracer, p))
454                         list_add(&p->ptrace_entry, &ptrace_dead);
455         }
456
457         write_unlock_irq(&tasklist_lock);
458         BUG_ON(!list_empty(&tracer->ptraced));
459
460         list_for_each_entry_safe(p, n, &ptrace_dead, ptrace_entry) {
461                 list_del_init(&p->ptrace_entry);
462                 release_task(p);
463         }
464
465         write_lock_irq(&tasklist_lock);
466 }
467
468 int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
469 {
470         int copied = 0;
471
472         while (len > 0) {
473                 char buf[128];
474                 int this_len, retval;
475
476                 this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
477                 retval = access_process_vm(tsk, src, buf, this_len, 0);
478                 if (!retval) {
479                         if (copied)
480                                 break;
481                         return -EIO;
482                 }
483                 if (copy_to_user(dst, buf, retval))
484                         return -EFAULT;
485                 copied += retval;
486                 src += retval;
487                 dst += retval;
488                 len -= retval;
489         }
490         return copied;
491 }
492
493 int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
494 {
495         int copied = 0;
496
497         while (len > 0) {
498                 char buf[128];
499                 int this_len, retval;
500
501                 this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
502                 if (copy_from_user(buf, src, this_len))
503                         return -EFAULT;
504                 retval = access_process_vm(tsk, dst, buf, this_len, 1);
505                 if (!retval) {
506                         if (copied)
507                                 break;
508                         return -EIO;
509                 }
510                 copied += retval;
511                 src += retval;
512                 dst += retval;
513                 len -= retval;
514         }
515         return copied;
516 }
517
518 static int ptrace_setoptions(struct task_struct *child, unsigned long data)
519 {
520         child->ptrace &= ~PT_TRACE_MASK;
521
522         if (data & PTRACE_O_TRACESYSGOOD)
523                 child->ptrace |= PT_TRACESYSGOOD;
524
525         if (data & PTRACE_O_TRACEFORK)
526                 child->ptrace |= PT_TRACE_FORK;
527
528         if (data & PTRACE_O_TRACEVFORK)
529                 child->ptrace |= PT_TRACE_VFORK;
530
531         if (data & PTRACE_O_TRACECLONE)
532                 child->ptrace |= PT_TRACE_CLONE;
533
534         if (data & PTRACE_O_TRACEEXEC)
535                 child->ptrace |= PT_TRACE_EXEC;
536
537         if (data & PTRACE_O_TRACEVFORKDONE)
538                 child->ptrace |= PT_TRACE_VFORK_DONE;
539
540         if (data & PTRACE_O_TRACEEXIT)
541                 child->ptrace |= PT_TRACE_EXIT;
542
543         return (data & ~PTRACE_O_MASK) ? -EINVAL : 0;
544 }
545
546 static int ptrace_getsiginfo(struct task_struct *child, siginfo_t *info)
547 {
548         unsigned long flags;
549         int error = -ESRCH;
550
551         if (lock_task_sighand(child, &flags)) {
552                 error = -EINVAL;
553                 if (likely(child->last_siginfo != NULL)) {
554                         *info = *child->last_siginfo;
555                         error = 0;
556                 }
557                 unlock_task_sighand(child, &flags);
558         }
559         return error;
560 }
561
562 static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info)
563 {
564         unsigned long flags;
565         int error = -ESRCH;
566
567         if (lock_task_sighand(child, &flags)) {
568                 error = -EINVAL;
569                 if (likely(child->last_siginfo != NULL)) {
570                         *child->last_siginfo = *info;
571                         error = 0;
572                 }
573                 unlock_task_sighand(child, &flags);
574         }
575         return error;
576 }
577
578
579 #ifdef PTRACE_SINGLESTEP
580 #define is_singlestep(request)          ((request) == PTRACE_SINGLESTEP)
581 #else
582 #define is_singlestep(request)          0
583 #endif
584
585 #ifdef PTRACE_SINGLEBLOCK
586 #define is_singleblock(request)         ((request) == PTRACE_SINGLEBLOCK)
587 #else
588 #define is_singleblock(request)         0
589 #endif
590
591 #ifdef PTRACE_SYSEMU
592 #define is_sysemu_singlestep(request)   ((request) == PTRACE_SYSEMU_SINGLESTEP)
593 #else
594 #define is_sysemu_singlestep(request)   0
595 #endif
596
597 static int ptrace_resume(struct task_struct *child, long request,
598                          unsigned long data)
599 {
600         if (!valid_signal(data))
601                 return -EIO;
602
603         if (request == PTRACE_SYSCALL)
604                 set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
605         else
606                 clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
607
608 #ifdef TIF_SYSCALL_EMU
609         if (request == PTRACE_SYSEMU || request == PTRACE_SYSEMU_SINGLESTEP)
610                 set_tsk_thread_flag(child, TIF_SYSCALL_EMU);
611         else
612                 clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
613 #endif
614
615         if (is_singleblock(request)) {
616                 if (unlikely(!arch_has_block_step()))
617                         return -EIO;
618                 user_enable_block_step(child);
619         } else if (is_singlestep(request) || is_sysemu_singlestep(request)) {
620                 if (unlikely(!arch_has_single_step()))
621                         return -EIO;
622                 user_enable_single_step(child);
623         } else {
624                 user_disable_single_step(child);
625         }
626
627         child->exit_code = data;
628         wake_up_state(child, __TASK_TRACED);
629
630         return 0;
631 }
632
633 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
634
635 static const struct user_regset *
636 find_regset(const struct user_regset_view *view, unsigned int type)
637 {
638         const struct user_regset *regset;
639         int n;
640
641         for (n = 0; n < view->n; ++n) {
642                 regset = view->regsets + n;
643                 if (regset->core_note_type == type)
644                         return regset;
645         }
646
647         return NULL;
648 }
649
650 static int ptrace_regset(struct task_struct *task, int req, unsigned int type,
651                          struct iovec *kiov)
652 {
653         const struct user_regset_view *view = task_user_regset_view(task);
654         const struct user_regset *regset = find_regset(view, type);
655         int regset_no;
656
657         if (!regset || (kiov->iov_len % regset->size) != 0)
658                 return -EINVAL;
659
660         regset_no = regset - view->regsets;
661         kiov->iov_len = min(kiov->iov_len,
662                             (__kernel_size_t) (regset->n * regset->size));
663
664         if (req == PTRACE_GETREGSET)
665                 return copy_regset_to_user(task, view, regset_no, 0,
666                                            kiov->iov_len, kiov->iov_base);
667         else
668                 return copy_regset_from_user(task, view, regset_no, 0,
669                                              kiov->iov_len, kiov->iov_base);
670 }
671
672 #endif
673
674 int ptrace_request(struct task_struct *child, long request,
675                    unsigned long addr, unsigned long data)
676 {
677         bool seized = child->ptrace & PT_SEIZED;
678         int ret = -EIO;
679         siginfo_t siginfo, *si;
680         void __user *datavp = (void __user *) data;
681         unsigned long __user *datalp = datavp;
682         unsigned long flags;
683
684         switch (request) {
685         case PTRACE_PEEKTEXT:
686         case PTRACE_PEEKDATA:
687                 return generic_ptrace_peekdata(child, addr, data);
688         case PTRACE_POKETEXT:
689         case PTRACE_POKEDATA:
690                 return generic_ptrace_pokedata(child, addr, data);
691
692 #ifdef PTRACE_OLDSETOPTIONS
693         case PTRACE_OLDSETOPTIONS:
694 #endif
695         case PTRACE_SETOPTIONS:
696                 ret = ptrace_setoptions(child, data);
697                 break;
698         case PTRACE_GETEVENTMSG:
699                 ret = put_user(child->ptrace_message, datalp);
700                 break;
701
702         case PTRACE_GETSIGINFO:
703                 ret = ptrace_getsiginfo(child, &siginfo);
704                 if (!ret)
705                         ret = copy_siginfo_to_user(datavp, &siginfo);
706                 break;
707
708         case PTRACE_SETSIGINFO:
709                 if (copy_from_user(&siginfo, datavp, sizeof siginfo))
710                         ret = -EFAULT;
711                 else
712                         ret = ptrace_setsiginfo(child, &siginfo);
713                 break;
714
715         case PTRACE_INTERRUPT:
716                 /*
717                  * Stop tracee without any side-effect on signal or job
718                  * control.  At least one trap is guaranteed to happen
719                  * after this request.  If @child is already trapped, the
720                  * current trap is not disturbed and another trap will
721                  * happen after the current trap is ended with PTRACE_CONT.
722                  *
723                  * The actual trap might not be PTRACE_EVENT_STOP trap but
724                  * the pending condition is cleared regardless.
725                  */
726                 if (unlikely(!seized || !lock_task_sighand(child, &flags)))
727                         break;
728
729                 /*
730                  * INTERRUPT doesn't disturb existing trap sans one
731                  * exception.  If ptracer issued LISTEN for the current
732                  * STOP, this INTERRUPT should clear LISTEN and re-trap
733                  * tracee into STOP.
734                  */
735                 if (likely(task_set_jobctl_pending(child, JOBCTL_TRAP_STOP)))
736                         signal_wake_up(child, child->jobctl & JOBCTL_LISTENING);
737
738                 unlock_task_sighand(child, &flags);
739                 ret = 0;
740                 break;
741
742         case PTRACE_LISTEN:
743                 /*
744                  * Listen for events.  Tracee must be in STOP.  It's not
745                  * resumed per-se but is not considered to be in TRACED by
746                  * wait(2) or ptrace(2).  If an async event (e.g. group
747                  * stop state change) happens, tracee will enter STOP trap
748                  * again.  Alternatively, ptracer can issue INTERRUPT to
749                  * finish listening and re-trap tracee into STOP.
750                  */
751                 if (unlikely(!seized || !lock_task_sighand(child, &flags)))
752                         break;
753
754                 si = child->last_siginfo;
755                 if (likely(si && (si->si_code >> 8) == PTRACE_EVENT_STOP)) {
756                         child->jobctl |= JOBCTL_LISTENING;
757                         /*
758                          * If NOTIFY is set, it means event happened between
759                          * start of this trap and now.  Trigger re-trap.
760                          */
761                         if (child->jobctl & JOBCTL_TRAP_NOTIFY)
762                                 signal_wake_up(child, true);
763                         ret = 0;
764                 }
765                 unlock_task_sighand(child, &flags);
766                 break;
767
768         case PTRACE_DETACH:      /* detach a process that was attached. */
769                 ret = ptrace_detach(child, data);
770                 break;
771
772 #ifdef CONFIG_BINFMT_ELF_FDPIC
773         case PTRACE_GETFDPIC: {
774                 struct mm_struct *mm = get_task_mm(child);
775                 unsigned long tmp = 0;
776
777                 ret = -ESRCH;
778                 if (!mm)
779                         break;
780
781                 switch (addr) {
782                 case PTRACE_GETFDPIC_EXEC:
783                         tmp = mm->context.exec_fdpic_loadmap;
784                         break;
785                 case PTRACE_GETFDPIC_INTERP:
786                         tmp = mm->context.interp_fdpic_loadmap;
787                         break;
788                 default:
789                         break;
790                 }
791                 mmput(mm);
792
793                 ret = put_user(tmp, datalp);
794                 break;
795         }
796 #endif
797
798 #ifdef PTRACE_SINGLESTEP
799         case PTRACE_SINGLESTEP:
800 #endif
801 #ifdef PTRACE_SINGLEBLOCK
802         case PTRACE_SINGLEBLOCK:
803 #endif
804 #ifdef PTRACE_SYSEMU
805         case PTRACE_SYSEMU:
806         case PTRACE_SYSEMU_SINGLESTEP:
807 #endif
808         case PTRACE_SYSCALL:
809         case PTRACE_CONT:
810                 return ptrace_resume(child, request, data);
811
812         case PTRACE_KILL:
813                 if (child->exit_state)  /* already dead */
814                         return 0;
815                 return ptrace_resume(child, request, SIGKILL);
816
817 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
818         case PTRACE_GETREGSET:
819         case PTRACE_SETREGSET:
820         {
821                 struct iovec kiov;
822                 struct iovec __user *uiov = datavp;
823
824                 if (!access_ok(VERIFY_WRITE, uiov, sizeof(*uiov)))
825                         return -EFAULT;
826
827                 if (__get_user(kiov.iov_base, &uiov->iov_base) ||
828                     __get_user(kiov.iov_len, &uiov->iov_len))
829                         return -EFAULT;
830
831                 ret = ptrace_regset(child, request, addr, &kiov);
832                 if (!ret)
833                         ret = __put_user(kiov.iov_len, &uiov->iov_len);
834                 break;
835         }
836 #endif
837         default:
838                 break;
839         }
840
841         return ret;
842 }
843
844 static struct task_struct *ptrace_get_task_struct(pid_t pid)
845 {
846         struct task_struct *child;
847
848         rcu_read_lock();
849         child = find_task_by_vpid(pid);
850         if (child)
851                 get_task_struct(child);
852         rcu_read_unlock();
853
854         if (!child)
855                 return ERR_PTR(-ESRCH);
856         return child;
857 }
858
859 #ifndef arch_ptrace_attach
860 #define arch_ptrace_attach(child)       do { } while (0)
861 #endif
862
863 SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
864                 unsigned long, data)
865 {
866         struct task_struct *child;
867         long ret;
868
869         if (request == PTRACE_TRACEME) {
870                 ret = ptrace_traceme();
871                 if (!ret)
872                         arch_ptrace_attach(current);
873                 goto out;
874         }
875
876         child = ptrace_get_task_struct(pid);
877         if (IS_ERR(child)) {
878                 ret = PTR_ERR(child);
879                 goto out;
880         }
881
882         if (request == PTRACE_ATTACH || request == PTRACE_SEIZE) {
883                 ret = ptrace_attach(child, request, data);
884                 /*
885                  * Some architectures need to do book-keeping after
886                  * a ptrace attach.
887                  */
888                 if (!ret)
889                         arch_ptrace_attach(child);
890                 goto out_put_task_struct;
891         }
892
893         ret = ptrace_check_attach(child, request == PTRACE_KILL ||
894                                   request == PTRACE_INTERRUPT);
895         if (ret < 0)
896                 goto out_put_task_struct;
897
898         ret = arch_ptrace(child, request, addr, data);
899
900  out_put_task_struct:
901         put_task_struct(child);
902  out:
903         return ret;
904 }
905
906 int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
907                             unsigned long data)
908 {
909         unsigned long tmp;
910         int copied;
911
912         copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
913         if (copied != sizeof(tmp))
914                 return -EIO;
915         return put_user(tmp, (unsigned long __user *)data);
916 }
917
918 int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
919                             unsigned long data)
920 {
921         int copied;
922
923         copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
924         return (copied == sizeof(data)) ? 0 : -EIO;
925 }
926
927 #if defined CONFIG_COMPAT
928 #include <linux/compat.h>
929
930 int compat_ptrace_request(struct task_struct *child, compat_long_t request,
931                           compat_ulong_t addr, compat_ulong_t data)
932 {
933         compat_ulong_t __user *datap = compat_ptr(data);
934         compat_ulong_t word;
935         siginfo_t siginfo;
936         int ret;
937
938         switch (request) {
939         case PTRACE_PEEKTEXT:
940         case PTRACE_PEEKDATA:
941                 ret = access_process_vm(child, addr, &word, sizeof(word), 0);
942                 if (ret != sizeof(word))
943                         ret = -EIO;
944                 else
945                         ret = put_user(word, datap);
946                 break;
947
948         case PTRACE_POKETEXT:
949         case PTRACE_POKEDATA:
950                 ret = access_process_vm(child, addr, &data, sizeof(data), 1);
951                 ret = (ret != sizeof(data) ? -EIO : 0);
952                 break;
953
954         case PTRACE_GETEVENTMSG:
955                 ret = put_user((compat_ulong_t) child->ptrace_message, datap);
956                 break;
957
958         case PTRACE_GETSIGINFO:
959                 ret = ptrace_getsiginfo(child, &siginfo);
960                 if (!ret)
961                         ret = copy_siginfo_to_user32(
962                                 (struct compat_siginfo __user *) datap,
963                                 &siginfo);
964                 break;
965
966         case PTRACE_SETSIGINFO:
967                 memset(&siginfo, 0, sizeof siginfo);
968                 if (copy_siginfo_from_user32(
969                             &siginfo, (struct compat_siginfo __user *) datap))
970                         ret = -EFAULT;
971                 else
972                         ret = ptrace_setsiginfo(child, &siginfo);
973                 break;
974 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
975         case PTRACE_GETREGSET:
976         case PTRACE_SETREGSET:
977         {
978                 struct iovec kiov;
979                 struct compat_iovec __user *uiov =
980                         (struct compat_iovec __user *) datap;
981                 compat_uptr_t ptr;
982                 compat_size_t len;
983
984                 if (!access_ok(VERIFY_WRITE, uiov, sizeof(*uiov)))
985                         return -EFAULT;
986
987                 if (__get_user(ptr, &uiov->iov_base) ||
988                     __get_user(len, &uiov->iov_len))
989                         return -EFAULT;
990
991                 kiov.iov_base = compat_ptr(ptr);
992                 kiov.iov_len = len;
993
994                 ret = ptrace_regset(child, request, addr, &kiov);
995                 if (!ret)
996                         ret = __put_user(kiov.iov_len, &uiov->iov_len);
997                 break;
998         }
999 #endif
1000
1001         default:
1002                 ret = ptrace_request(child, request, addr, data);
1003         }
1004
1005         return ret;
1006 }
1007
1008 asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
1009                                   compat_long_t addr, compat_long_t data)
1010 {
1011         struct task_struct *child;
1012         long ret;
1013
1014         if (request == PTRACE_TRACEME) {
1015                 ret = ptrace_traceme();
1016                 goto out;
1017         }
1018
1019         child = ptrace_get_task_struct(pid);
1020         if (IS_ERR(child)) {
1021                 ret = PTR_ERR(child);
1022                 goto out;
1023         }
1024
1025         if (request == PTRACE_ATTACH || request == PTRACE_SEIZE) {
1026                 ret = ptrace_attach(child, request, data);
1027                 /*
1028                  * Some architectures need to do book-keeping after
1029                  * a ptrace attach.
1030                  */
1031                 if (!ret)
1032                         arch_ptrace_attach(child);
1033                 goto out_put_task_struct;
1034         }
1035
1036         ret = ptrace_check_attach(child, request == PTRACE_KILL ||
1037                                   request == PTRACE_INTERRUPT);
1038         if (!ret)
1039                 ret = compat_arch_ptrace(child, request, addr, data);
1040
1041  out_put_task_struct:
1042         put_task_struct(child);
1043  out:
1044         return ret;
1045 }
1046 #endif  /* CONFIG_COMPAT */
1047
1048 #ifdef CONFIG_HAVE_HW_BREAKPOINT
1049 int ptrace_get_breakpoints(struct task_struct *tsk)
1050 {
1051         if (atomic_inc_not_zero(&tsk->ptrace_bp_refcnt))
1052                 return 0;
1053
1054         return -1;
1055 }
1056
1057 void ptrace_put_breakpoints(struct task_struct *tsk)
1058 {
1059         if (atomic_dec_and_test(&tsk->ptrace_bp_refcnt))
1060                 flush_ptrace_hw_breakpoint(tsk);
1061 }
1062 #endif /* CONFIG_HAVE_HW_BREAKPOINT */