linux/kernel/ptrace.c
<<
opti.35/spa="v .35/form"v .35a opti.3 href="../linux+v3 1/kernel/ptrace.c">opti.35img src="../.static/gfx/right.png" alt=">>">op5/spa="vop5spa= class="lxr_search">optiopti.35input typ.6.hidden" nam.6.navtarget" v2.6.">opti.35input typ.6.text" nam.6.search" id6.search">opti.35butt > typ.6.submit">Search"v .35/form"v 5/spa="vop5spa= class="lxr_prefs""v .35a href="+prefs?return=kernel/ptrace.c"opti.3 onclick="return ajax_prefs();">opti.3Prefsv .35/a>op5/spa="vti.3 35/div"vti.3 35form aclue=="ajax+*" method="post" onsubmit="return false;">op5input typ.6.hidden" nam.6.ajax_lookup" id6.ajax_lookup" v2.6.">oti.3 35/form"voti.3 35div class="headingbott m">v 5div id6.file_contents""
3 315/a>5spa= class="comment">/*5/spa="v3 325/a>5spa= class="comment"> * linux/kernel/ptrace.c5/spa="v3 335/a>5spa= class="comment"> *5/spa="v3 345/a>5spa= class="comment"> * (C) Copyright 1999 Linus Tor  vds5/spa="v3 355/a>5spa= class="comment"> *5/spa="v3 365/a>5spa= class="comment"> * Comm >
interfaces for "ptrace()" which we do not want5/spa="v3 375/a>5spa= class="comment"> * to continually duplicate across every architecture.5/spa="v3 385/a>5spa= class="comment"> */5/spa="v3 395/a>o3  >
 a>#include <linux/capability.h
 a>>o3 11
 a>#include <linux/export.h
 a>>o3 12
 a>#include <linux/sched.h
 a>>o3 13
 a>#include <linux/errno.h
 a>>o3 14
 a>#include <linux/mm.h
 a>>o3 15
 a>#include <linux/highmem.h
 a>>o3 16
 a>#include <linux/pagemap.h
 a>>o3 17
 a>#include <linux/ptrace.h
 a>>o3 18
 a>#include <linux/security.h
 a>>o3 19
 a>#include <linux/signal.h
 a>>o3 2>
 a>#include <linux/audit.h
 a>>o3 21
 a>#include <linux/pid_nam.space.h
 a>>o3 22
 a>#include <linux/syscalls.h
 a>>o3 23
 a>#include <linux/uaccess.h
 a>>o3 24
 a>#include <linux/regset.h
 a>>o3 25
 a>#include <linux/hw_breakpoint.h
 a>>o3 26
 a>#include <linux/cn_proc.h
 a>>o3 275/a>o3 285/a>o3 29
 a>static
int35a href="+code=ptrace_trapping_sleep_fn" class="sref">ptrace_trapping_sleep_fn
 a>(void *5a href="+code=flags" class="sref">flags
 a>)v3 3>
 a>{v3 31
 a>        5a href="+code=schedule" class="sref">schedule
 a>();o3 32
 a>        return 0;o3 33
 a>}o3 345/a>o3 355/a>5spa= class="comment">/*5/spa="v3 365/a>5spa= class="comment"> * ptrace a task: make the debugger its new parent and5/spa="v3 375/a>5spa= class="comment"> * move it to the ptrace list.5/spa="v3 385/a>5spa= class="comment"> *5/spa="v3 395/a>5spa= class="comment"> * Must be called with the tasklist lock write-held.5/spa="v3 405/a>5spa= class="comment"> */5/spa="v3 41
 a>void 5a href="+code=__ptrace_link" class="sref">__ptrace_link
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code=child" class="sref">child
 a>, struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code=new_parent" class="sref">new_parent
 a>)v3 42
 a>{v3 43
 a>        5a href="+code=BUG_ON" class="sref">BUG_ON
 a>(!5a href="+code=list_empty" class="sref">list_empty
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=ptrace_entry" class="sref">ptrace_entry
 a>));o3 44
 a>        5a href="+code=list_add" class="sref">list_add
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=ptrace_entry" class="sref">ptrace_entry
 a>, &5a href="+code=new_parent" class="sref">new_parent
 a>->5a href="+code=ptraced" class="sref">ptraced
 a>);o3 45
 a>        5a href="+code=child" class="sref">child
 a>->5a href="+code=parent" class="sref">parent
 a> = 5a href="+code=new_parent" class="sref">new_parent
 a>;o3 46
 a>}o3 475/a>o3 485/a>5spa= class="comment">/**5/spa="v3 495/a>5spa= class="comment"> * __ptrace_unlink - unlink ptracee and restore its execu	  >
state5/spa="v3 505/a>5spa= class="comment"> * @child: ptracee to be unlinked5/spa="v3 515/a>5spa= class="comment"> *5/spa="v3 525/a>5spa= class="comment"> * Remove @child from the ptrace list, move it back to the original parent,5/spa="v3 535/a>5spa= class="comment"> * and restore the execu	  >
state so that it conforms to the group
stop5/spa="v3 545/a>5spa= class="comment"> * state.5/spa="v3 555/a>5spa= class="comment"> *5/spa="v3 565/a>5spa= class="comment"> * Unlinking can happen via two paths - explicit PTRACE_DETACH or ptracer5/spa="v3 575/a>5spa= class="comment"> * exiting.  For PTRACE_DETACH, unless the ptracee has been killed between5/spa="v3 585/a>5spa= class="comment"> * ptrace_check_attach() and here, it's guaranteed to be in TASK_TRACED.5/spa="v3 595/a>5spa= class="comment"> * If the ptracer is exiting, the ptracee can be in any state.5/spa="v3 605/a>5spa= class="comment"> *5/spa="v3 615/a>5spa= class="comment"> * After detach, the ptracee should be in a
state which conforms to the5/spa="v3 625/a>5spa= class="comment"> * group
stop.  If the group
is stopped or in the process of stopping, the5/spa="v3 635/a>5spa= class="comment"> * ptracee should be put into TASK_STOPPED; otherwise, it should be woken5/spa="v3 645/a>5spa= class="comment"> * up
from TASK_TRACED.5/spa="v3 655/a>5spa= class="comment"> *5/spa="v3 665/a>5spa= class="comment"> * If the ptracee
is in TASK_TRACED and needs to be moved to TASK_STOPPED,5/spa="v3 675/a>5spa= class="comment"> * it goes through TRACED -> RUNNING -> STOPPED transi	  >
which is similar5/spa="v3 685/a>5spa= class="comment"> * to but in the opposi	e direclue= of what happens
while attaching to a5/spa="v3 695/a>5spa= class="comment"> * stopped task.  However, in this direclue=, the intermediate RUNNING5/spa="v3 705/a>5spa= class="comment"> * state is not hidden even from the current ptracer and if it immediately5/spa="v3 715/a>5spa= class="comment"> * re-attaches and performs a WNOHANG wait(2), it may fail.5/spa="v3 725/a>5spa= class="comment"> *5/spa="v3 735/a>5spa= class="comment"> * CONTEXT:5/spa="v3 745/a>5spa= class="comment"> * write_lock_irq(tasklist_lock)5/spa="v3 755/a>5spa= class="comment"> */5/spa="v3 76
 a>void 5a href="+code=__ptrace_unlink" class="sref">__ptrace_unlink
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code=child" class="sref">child
 a>)v3 77
 a>{v3 78
 a>        5a href="+code=BUG_ON" class="sref">BUG_ON
 a>(!5a href="+code=child" class="sref">child
 a>->5a href="+code=ptrace" class="sref">ptrace
 a>);o3 795/a>o3 80
 a>        5a href="+code=child" class="sref">child
 a>->5a href="+code=ptrace" class="sref">ptrace
 a> = 0;o3 81
 a>        5a href="+code=child" class="sref">child
 a>->5a href="+code=parent" class="sref">parent
 a> = 5a href="+code=child" class="sref">child
 a>->5a href="+code=real_parent" class="sref">real_parent
 a>;o3 82
 a>        5a href="+code=list_del_init" class="sref">list_del_init
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=ptrace_entry" class="sref">ptrace_entry
 a>);o3 835/a>o3 84
 a>        5a href="+code=spin_lock" class="sref">spin_lock
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=sighand" class="sref">sighand
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o3 855/a>o3 86
 a>        5spa= class="comment">/*5/spa="v3 875/a>5spa= class="comment">         * Clear all pending traps and TRAPPING.  TRAPPING should be5/spa="v3 885/a>5spa= class="comment">         * cleared regardless of JOBCTL_STOP_PENDING.  Do it explicitly.5/spa="v3 895/a>5spa= class="comment">         */5/spa="v3 90
 a>        5a href="+code=task_clear_jobctl_pending" class="sref">task_clear_jobctl_pending
 a>(5a href="+code=child" class="sref">child
 a>, 5a href="+code=JOBCTL_TRAP_MASK" class="sref">JOBCTL_TRAP_MASK
 a>);o3 91
 a>        5a href="+code=task_clear_jobctl_trapping" class="sref">task_clear_jobctl_trapping
 a>(5a href="+code=child" class="sref">child
 a>);o3 925/a>o3 93
 a>        5spa= class="comment">/*5/spa="v3 945/a>5spa= class="comment">         * Reinstate JOBCTL_STOP_PENDING if group
stop
is in effecl and5/spa="v3 955/a>5spa= class="comment">         * @child isn't dead.5/spa="v3 965/a>5spa= class="comment">         */5/spa="v3 97
 a>        if (!(5a href="+code=child" class="sref">child
 a>->5a href="+code=flags" class="sref">flags
 a> & 5a href="+code=PF_EXITING" class="sref">PF_EXITING
 a>) &&v3 98
 a>            (5a href="+code=child" class="sref">child
 a>->5a href="+code=signal" class="sref">signal
 a>->5a href="+code=flags" class="sref">flags
 a> & 5a href="+code=SIGNAL_STOP_STOPPED" class="sref">SIGNAL_STOP_STOPPED
 a> ||v3 99
 a>             5a href="+code=child" class="sref">child
 a>->5a href="+code=signal" class="sref">signal
 a>->5a href="+code=group_stop_count" class="sref">group_stop_count
 a>)) {v3100
 a>                5a href="+code=child" class="sref">child
 a>->5a href="+code=jobctl" class="sref">jobctl
 a> |= 5a href="+code=JOBCTL_STOP_PENDING" class="sref">JOBCTL_STOP_PENDING
 a>;o31015/a>o3102
 a>                5spa= class="comment">/*5/spa="v31035/a>5spa= class="comment">                 * This is only possible if this thread was cloned by the5/spa="v31045/a>5spa= class="comment">                 * traced task running in the stopped group, set the signal
 spa="v31055/a>5spa= class="comment">                 * for the future reports.5/spa="v31065/a>5spa= class="comment">                 * FIXME: we should change ptrace_init_task() to handle this5/spa="v31075/a>5spa= class="comment">                 * case.5/spa="v31085/a>5spa= class="comment">                 */5/spa="v3109
 a>                if (!(5a href="+code=child" class="sref">child
 a>->5a href="+code=jobctl" class="sref">jobctl
 a> & 5a href="+code=JOBCTL_STOP_SIGMASK" class="sref">JOBCTL_STOP_SIGMASK
 a>))o3110
 a>                        5a href="+code=child" class="sref">child
 a>->5a href="+code=jobctl" class="sref">jobctl
 a> |= 5a href="+code=SIGSTOP" class="sref">SIGSTOP
 a>;o3111
 a>        }o31125/a>o3113
 a>        5spa= class="comment">/*5/spa="v31145/a>5spa= class="comment">         * If transi	  >
to TASK_STOPPED is pending or in TASK_TRACED, kick
 spa="v31155/a>5spa= class="comment">         * @child in the butt.  Note that @resume should be used iff @child
 spa="v31165/a>5spa= class="comment">         *
is in TASK_TRACED; otherwise, we might unduly disrupt5/spa="v31175/a>5spa= class="comment">         * TASK_KILLABLE sleeps.5/spa="v31185/a>5spa= class="comment">         */5/spa="v3119
 a>        if (5a href="+code=child" class="sref">child
 a>->5a href="+code=jobctl" class="sref">jobctl
 a> & 5a href="+code=JOBCTL_STOP_PENDING" class="sref">JOBCTL_STOP_PENDING
 a> || 5a href="+code=task_is_traced" class="sref">task_is_traced
 a>(5a href="+code=child" class="sref">child
 a>))o3120
 a>                5a href="+code=signal_wake_up" class="sref">signal_wake_up
 a>(5a href="+code=child" class="sref">child
 a>, 5a href="+code=task_is_traced" class="sref">task_is_traced
 a>(5a href="+code=child" class="sref">child
 a>));o31215/a>o3122
 a>        5a href="+code=spin_unlock" class="sref">spin_unlock
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=sighand" class="sref">sighand
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o3123
 a>}o31245/a>o31255/a>5spa= class="comment">/**5/spa="v31265/a>5spa= class="comment"> * ptrace_check_attach - check whether ptracee
is ready for ptrace opera	  >5/spa="v31275/a>5spa= class="comment"> * @child: ptracee to check for5/spa="v31285/a>5spa= class="comment"> * @ignore_state: don't check whether @child is currently %TASK_TRACED5/spa="v31295/a>5spa= class="comment"> *5/spa="v31305/a>5spa= class="comment"> * Check whether @child is being ptraced by %current and ready for further5/spa="v31315/a>5spa= class="comment"> * ptrace opera	  >s.  If @ignore_state is %false, @child also should be in5/spa="v31325/a>5spa= class="comment"> * %TASK_TRACED state and  >
return the child is guaranteed to be traced
 spa="v31335/a>5spa= class="comment"> * and not execu	 ng.  If @ignore_state is %true, @child can be in any
 spa="v31345/a>5spa= class="comment"> * state.5/spa="v31355/a>5spa= class="comment"> *5/spa="v31365/a>5spa= class="comment"> * CONTEXT:5/spa="v31375/a>5spa= class="comment"> * Grabs and releases tasklist_lock and @child->sighand->siglock.5/spa="v31385/a>5spa= class="comment"> *5/spa="v31395/a>5spa= class="comment"> * RETURNS:5/spa="v31405/a>5spa= class="comment"> * 0  >
success, -ESRCH if %child is not ready.5/spa="v31415/a>5spa= class="comment"> */5/spa="v3142
 a>int35a href="+code=ptrace_check_attach" class="sref">ptrace_check_attach
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code=child" class="sref">child
 a>, 5a href="+code=bool" class="sref">bool
 a> 5a href="+code=ignore_state" class="sref">ignore_state
 a>)v3143
 a>{v3144
 a>        int35a href="+code=ret" class="sref">ret
 a> = -5a href="+code=ESRCH" class="sref">ESRCH
 a>;o31455/a>o3146
 a>        5spa= class="comment">/*5/spa="v31475/a>5spa= class="comment">         * We take the read lock around doing both checks to close a5/spa="v31485/a>5spa= class="comment">         * possible race where someone else was tracing our child and5/spa="v31495/a>5spa= class="comment">         * detached between these two checks.  After this locked check,5/spa="v31505/a>5spa= class="comment">         * we are sure that this is our traced child and that can only5/spa="v31515/a>5spa= class="comment">         * be changed by us so it's not changing right after this.5/spa="v31525/a>5spa= class="comment">         */5/spa="v3153
 a>        5a href="+code=read_lock" class="sref">read_lock
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o3154
 a>        if ((5a href="+code=child" class="sref">child
 a>->5a href="+code=ptrace" class="sref">ptrace
 a> & 5a href="+code=PT_PTRACED" class="sref">PT_PTRACED
 a>) && 5a href="+code=child" class="sref">child
 a>->5a href="+code=parent" class="sref">parent
 a> == 5a href="+code=current" class="sref">current
 a>) {v3155
 a>                5spa= class="comment">/*5/spa="v31565/a>5spa= class="comment">                 * child->sighand can't be NULL, release_task()5/spa="v31575/a>5spa= class="comment">                 * does ptrace_unlink() before __exit_signal().5/spa="v31585/a>5spa= class="comment">                 */5/spa="v3159
 a>                5a href="+code=spin_lock_irq" class="sref">spin_lock_irq
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=sighand" class="sref">sighand
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o3160
 a>                5a href="+code=WARN_ON_ONCE" class="sref">WARN_ON_ONCE
 a>(5a href="+code=task_is_stopped" class="sref">task_is_stopped
 a>(5a href="+code=child" class="sref">child
 a>));o3161
 a>                if (5a href="+code=ignore_state" class="sref">ignore_state
 a> || (5a href="+code=task_is_traced" class="sref">task_is_traced
 a>(5a href="+code=child" class="sref">child
 ahref="+code=group_stop_count" class="s1"kernel/p1.L62" class="line" nam.61.L62"16102
 a>                                    (!(5a href="+code=child" class="sref">child
 a>->5a href="+code=jobctl" class="sref">jobctl
 a> & 5a href="+code=JOBCTLISTENNDING" class="sref">JOBCTLISTENNDIld
 a>a>)v                      t35a href="+code=ret" class="sref">ret
 a> = 0;o                5a href="+code=spin_unlock_irq" class="sref">spin_unlock_irq
 a>(&5a href="+code=child" class="sref">child
 a>->5a href="+code=sighand" class="sref">sighand
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o      a>}o6146
 a>        5a href="+code=rean_unlock" class="srefe=rean_unlock
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);oo        if t35a href="+code=ret" class="sref">ret
 a) && t35a href="+code=ignore_state" class="sref">ignore_state
 a>)v                5a href="+code=ret" class="sref">ret
 a>   5a href="+codG wa_">tasknm acvate" class="srefG wa_">tasknm acvaup
 a>(5a href="+code=child" class="sref">child
 a>, 5a href="+cod7;TASK_TRACld" class="sref7;TASK_TRACED
 ah? 0 : = -5a href="+code=ESRCH" class="sref">ESRCH
 a>;o;o        5spa= class="comment"> All systems go..   */5/spa="v        retur  5a href="+code=ret" class="sref">ret
 a>;o}oostatic
int35a href="+code=ptrachas_ca_up" class="srefe=ptrachas_ca_ch
 a>(struct35a href="+coduserid_nam.spaup" class="srefuserid_nam.spact
 a> *5a href="+codnags" class="srefnsld
 a>unt_siused
int35a href="+codm+cogs" class="srefm+cote
 a>)v        ift35a href="+codm+cogs" class="srefm+cote
 a> & 5a href="+code=PTRACMODE_NOAUDITED" class="sref">PTRACMODE_NOAUDITte
 a>)v                retur  5a href="+codhas_ns_ca_apabili_nox/audED" class="srefhas_ns_ca_apabili_nox/audup
 a>(5a href="+code=current" class="sref">current
 a>, 5a href="+codnags" class="srefnsld
 a>, 5a href="+codCAP_SYSPT_PTRAgs" class="srefCAP_SYSPT_PTRAck
 a>);o      e el);o                retur  5a href="+codhas_ns_ca_apabiliED" class="srefhas_ns_ca_apabiliup
 a>(5a href="+code=current" class="sref">current
 a>, 5a href="+codnags" class="srefnsld
 a>, 5a href="+codCAP_SYSPT_PTRAgs" class="srefCAP_SYSPT_PTRAck
 a>);o}oo__ptracmay_/uaccegs" class="sref">__ptracmay_/uaccech
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+cod">tact" class="sref">tald
 a>unt_siused
int35a href="+codm+cogs" class="srefm+cote
 a>)v      const>, struct35a href="+codcraced" class="srefcracct
 a> *5a href="+coderaced" class="srefcracct
 a == 5a href="+code=curre_eraced" class="srefc=curre_eracch
 a),a> *5a href="+cod"eraced" class="srefteracch
 >);o        5spa= class="comment"> May * winspffecf thei eve">ta?*/5/spa="v5spa= class="comment">         * Thit checThie useg boty foe attachind wit">ptrace5/spa="v5spa= class="comment">        ld any foellowchin/uacceks tseransimoveconfoera	 be i/n_proce5/spa="v5spa= class="comment">        ce5/spa="v5spa= class="comment">         __ptrack_attacdeniestseveral * casnd tha/n_proellowhis5/spa="v5spa= class="comment">         becae up, scu	  * uf thneaccearyal pare/d chilrelera	  hitop5/spa="v5spa= class="comment">       *ng ohalcu	  t thepffifiaced tasthism* possiboce5/spa="v5spa= class="comment">         */5/spa="v      d
int35a href="+coddum_apdule" class="srefdum_apduet
 a> = 0;o        5spa= class="comment"> D don'let>,/securi m+culasndeny d
irospffea	 b  */5/spa="v        if *5a href="+cod">tact" class="sref">tald
 a> == 5a href="+code=current" class="sref">current
 a="v                retur= 0;o        5a href="+codecu_e=read_lock" class="sref"cu_e=read_loch
 a)gt;o        5a href="+codeeraced" class="srefteracch
 a == 5a href="+cod__">taseraced" class="sref__">taseracCE
 a>(5a href="+code=tact" class="sref">tald
 )gt;o        if *5a href="+coduid_eirq" class="srefuid_eiup
 a>(5a href="+coderaced" class="srefcracct
 a>->5a href="+coduidrq" class="srefuidld
 a>, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+codeuidrq" class="srefeuidld
 ahref="+code=group_stop_count" class="s2L102" id62L102" class="line" nam.62L102"23102
 a>           *5a href="+coduid_eirq" class="srefuid_eiup
 a>(5a href="+coderaced" class="srefcracct
 a>->5a href="+coduidrq" class="srefuidld
 a>, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+codsuidrq" class="srefsuidld
 ahref="+code=group_stop_count" class="s2LL23" id6.L103" class="line" nam.62L103"20302
 a>           *5a href="+coduid_eirq" class="srefuid_eiup
 a>(5a href="+coderaced" class="srefcracct
 a>->5a href="+coduidrq" class="srefuidld
 a>, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+coduidrq" class="srefuidld
 ) href="+code=group_stop_count" class="s2LL24" id6.L104" class="line" nam.62L104"20459
 a>          t;5a href="+codgid_eirq" class="srefgid_eiup
 a>(5a href="+coderaced" class="srefcracct
 a>->5a href="+codgidrq" class="srefgidld
 a>, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+codegidrq" class="srefegidld
 ahref="+code=group_stop_count" class="s2L524" id6.LL95" class="line" nam.62L105"20155
 a>          t;5a href="+codgid_eirq" class="srefgid_eiup
 a>(5a href="+coderaced" class="srefcracct
 a>->5a href="+codgidrq" class="srefgidld
 a>, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+codsgidrq" class="srefsgidld
 ahref="+code=group_stop_count" class="s2LL26" id6.L106" class="line" nam.62L106"20655
 a>          t;5a href="+codgid_eirq" class="srefgid_eiup
 a>(5a href="+coderaced" class="srefcracct
 a>->5a href="+codgidrq" class="srefgidld
 a>, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+codgidrq" class="srefgidld
 >a>)v              gos tt;5a href="+codoact" class="srefokch
 >);o        ift35a href="+code=ptrachas_ca_up" class="srefe=ptrachas_ca_ch
 a, 5a href="+codeeraced" class="srefteracch
 a>->5a href="+coduseridegs" class="srefuserideld
 a>, 5a href="+codm+cogs" class="srefm+cote
 aa>)v              gos tt;5a href="+codoact" class="srefokch
 >);o        5a href="+cod"cu_e=rean_unlock" class="srefecu_e=rean_unloch
 a)gt;o        retur= -5a href="+codePERMCH" class="sref"PERMch
 >);o        5a href="+codecu_e=rean_unlock" class="srefecu_e=rean_unloch
 a)gt;o        5a href="+codemp_rmbrq" class="srefsmp_rmbch
 a)gt;o        ift35a href="+code=tact" class="sref">tald
 a>->5a href="+codmmgs" class="srefmmnt
 a="v                5a href="+coddum_apdule" class="srefdum_apduet
 a> t;5a href="+codget_dum_apdule" class="srefget_dum_apduCE
 a>(5a href="+code=tact" class="sref">tald
 a>->5a href="+codmmgs" class="srefmmnt
 agt;o        if   5a href="+coddum_apdule" class="srefdum_apduet
 aa) && t35a href="+code=ptrachas_ca_up" class="srefe=ptrachas_ca_ch
 a, 5a href="+code>tasuseridegs" class="srefe>tasuserideCE
 a>(5a href="+code=tact" class="sref">tald
 )a>, 5a href="+codm+cogs" class="srefm+cote
 aa>)v                retur= -5a href="+codePERMCH" class="sref"PERMch
 >);oo        retur  5a href="+cod,/securi>__ptrac/uaccece_cherq" class="srefs/securi>__ptrac/uaccece_cheCE
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+codm+cogs" class="srefm+cote
 a>);o}oobool
 a> 5a href="+cod__ptracmay_/uaccegs" class="sref__ptracmay_/uaccech
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+cod">tact" class="sref">tald
 a>unt_siused
int35a href="+codm+cogs" class="srefm+cote
 a>)v      d
int35a href="+coderrrq" class="sreferrch
 >);o        5a href="+cod">tast_lock" class="sref">taad_loch
 a>(5a href="+code=tact" class="sref">tald
 )gt;o        5a href="+coderrrq" class="sreferrch
 a == 5a href="+cod____ptracmay_/uaccegs" class="sref">__ptracmay_/uaccech
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+codm+cogs" class="srefm+cote
 a>);o        5a href="+code>tasu_unlock" class="srefe>tasu_unloch
 a>(5a href="+code=tact" class="sref">tald
 )gt;o        retur t35a href="+coderrrq" class="sreferrch
 >);o}oostatic
int35a href="+code=ptrack_attach" class="sref">ptrack_attach
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code=tact" class="sref">tald
 a>longr  5a href="+code=quesret" class="sref">quesrld
 aa>o                      >unt_siuselongr  5a href="+codaddrrq" class="srefaddrld
 aa>o                      >unt_siuselongr  5a href="+code=flags" class="sref">flags
 a>)v        5a href="+code=bool" class="sref">bool
 a> 5a href="+codseizogs" class="srefseizoch
 a =a>(5a href="+code=quesret" class="sref">quesrld
 a> == 5a href="+cod">PTRACSEIZAgs" class="sref">PTRACSEIZAld
 )gt;o      d
int35a href="+cod  rvgnal" class="sref  rvgnch
 >);o        5a href="+code rvgnal" class="sref  rvgnch
 a> = -5a href="+codeIOCH" class="sref"IOch
 >);o        ift35a href="+codseizogs" class="srefseizoch
 a>) {v                if (5a href="+codaddrrq" class="srefaddrld
  != 0a>)v                      gos tt;5a href="+codouret" class="srefourch
 >);o                if (5a href="+code=flags" class="sref">flags
 a> &~(unt_siuselong)= 5a href="+cod">PTRACOAP_MASK" class="sref">PTRACOAP_MAgs
 a>)v                      gos tt;5a href="+codouret" class="srefourch
 >);o               (5a href="+code=flags" class="sref">flags
 a == 5a href="+cod">PT_PTRACED" class="sref">PT_PTRACED
   || 5a href="+cod">PSEIZACED" class="sref">PSEIZACED
   |f (5a href="+code=flags" class="sref">flags
 a>lt;>lt;|| 5a href="+cod">PO">PFLAG_SHIFTED" class="sref">PO">PFLAG_SHIFTld
 )gt;o      }ne els) {v               (5a href="+code=flags" class="sref">flags
 a == 5a href="+cod">PT_PTRACED" class="sref">PT_PTRACED
 gt;o      a>}oo        5a href="+codx/aud_e=ptrace" class="srefx/aud_e=ptrach
 a>(5a href="+code=tact" class="sref">tald
 )gt;oo        5a href="+code rvgnal" class="sref  rvgnch
 a> = -5a href="+codePERMCH" class="sref"PERMch
 >);o        if *5a href="+codunlikeliED" class="srefunlikeliCE
 a>(5a href="+code=tact" class="sref">tald
 a>->5a href="+code=flags" class="sref">flags
 a> & 5a href="+code=PKTHREACED" class="sref"=PKTHREACte
 aa>)v              gos tt;5a href="+codouret" class="srefourch
 >);o        ift35a href="+cods na_s thre_d grogs" class="srefs na_s thre_d groch
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+code=current" class="sref">current
 aa>)v              gos tt;5a href="+codouret" class="srefourch
 >);oo        5spa= class="comment">/*5/spa="v5spa= class="comment">        lProtffect exit'eracmmeial * lculera	   agaReinis oud
ierfeurrce;/*5/spa="v5spa= class="comment">         SUID, SGIDld anLSM;eracs ge9;t iermiiusediffeurrtonly5/spa="v5spa= class="comment">         undther ptraoce5/spa="v5spa= class="comment">         */5/spa="v        5a href="+code=rvgnal" class="sref  rvgnch
 a> = -5a href="+codeRESTARTNOINTRCH" class="sref"RESTARTNOINTRch
 >);o        ift35a href="+codmutexin_lock
ierisruipdule" class="srefmutexin_lock
ierisruipduch
 a>(&5a href="+code=tact" class="sref">tald
 a>->5a href="+code=signal" class="sref">signal
 a>->5a href="+coderac_s gud_mutexnt" class="sref"rac_s gud_mutexnt
 aa>)v              gos tt;5a href="+codouret" class="srefourch
 >);o        5a href="+cod">tast_lock" class="sref">taad_loch
 a>(5a href="+code=tact" class="sref">tald
 )gt;o        5a href="+code=rvgnal" class="sref  rvgnch
 a> = 5a href="+cod____ptracmay_/uaccegs" class="sref">__ptracmay_/uaccech
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+cod">PTRACMODE_ATTASRCH" class="sref">PTRACMODE_ATTASRld
 )gt;o        5a href="+code>tasu_unlock" class="srefe>tasu_unloch
 a>(5a href="+code=tact" class="sref">tald
 )gt;o        ift35a href="+code=rvgnal" class="sref  rvgnch
 a>)v              gos tt;5a href="+codn_unloceracsED" class="srefunlnloceracsch
 >);oo        5a href="+codwritein_lock_irq" class="srefwritein_lock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o        5a href="+code rvgnal" class="sref  rvgnch
 a> = -5a href="+codePERMCH" class="sref"PERMch
 >);o        ift35a href="+codunlikeliED" class="srefunlikeliCE
 a>(5a href="+code=tact" class="sref">tald
 a>->5a href="+cod__exit_state" class="sref__exit_stant
 aa>)v              gos tt;5a href="+codunlnloc">taskliED" class="srefunlnloc">tasklich
 >);o        ift35a href="+code=tact" class="sref">tald
 a>->5a href="+code=ptrace" class="srefe=ptrach
 a>)v              gos tt;5a href="+codunlnloc">taskliED" class="srefunlnloc">tasklich
 >);oo        ift35a href="+codseizogs" class="srefseizoch
 aa>o              t;5a href="+code=flags" class="sref">flags
 a> |= 5a href="+cod">PSEIZACED" class="sref">PSEIZACED
 >);o        ift35a href="+codns_ca_apdule" class="srefns_ca_apduCE
 a>(5a href="+code=tasuseridegs" class="srefe>tasuserideCE
 a>(5a href="+code=tact" class="sref">tald
 )a>, 5a href="+codCAP_SYSPT_PTRAgs" class="srefCAP_SYSPT_PTRAck
 aaa>o              t;5a href="+code=flags" class="sref">flags
 a> |= 5a href="+cod">P">PTRACCAPED" class="sref">PT_PTRACCAPED
 >);o        5a href="+code=tact" class="sref">tald
 a>->5a href="+code=ptrace" class="srefe=ptrach
 a> = 5a href="+code=flags" class="sref">flags
 >);oo        5a href="+cod">__ptrac="lact" class="sref">__ptrac="lach
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+code=current" class="sref">current
 a>);oo        5spa= class="comment"> SEIZA * dodon'/ptp /ptrae 0  k_attac  */5/spa="v        if t35a href="+codseizogs" class="srefseizoch
 aa>o                5a href="+codeendit_s_econgs" class="srefsendit_s_econch
 a>(5a href="+code=SIGSTOP" class="sref">SIGSTOP
 a>, 5a href="+codSENDOP_S_FORRACED" class="srefSENDOP_S_FORRACOP
 a>, 5a href="+code=tact" class="sref">tald
 )gt;oo        5a href="+code=spiunlock" class="sref">spiunlock
 a>(&5a href="+code=tact" class="sref">tald
 a>->5a href="+code=sighand" class="sref">sighand
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o        5spa= class="comment">*/5/spa="v5spa= class="comment">         * Ifheed tasthiald readK_STOPP,p, s ">JOBCT_PTPTL_STld and5/spa="v5spa= class="comment">         _PTPPING,ld an, ki itus sd thai9;/ptranseks t_PTRAC.  _PTPPINGnd5/spa="v5spa= class="comment">         will * belearused rn the chil="cpletasnd e;/ptransa	 b foe any
 spa="v5spa= class="comment">         evrrenwhitacelearsnd e;d gro s_st * stas happe  >s.Weonll G wany
 spa="v5spa= class="comment">        ly fod e;/ptransa	 bs to"cpleta() befor  retuu	  fromer thny
 spa="v5spa= class="comment">         funfea	 oce5/spa="v5spa= class="comment">        ce5/spa="v5spa= class="comment">         * Thihidas K_STOPP a>-&g RUNNNDI a>-&g K_TRACE/ptransa	 bfromer ace5/spa="v5spa= class="comment">       *ne attachins thre but aediffeurrtns thre iurn ths na;d gro ca in5/spa="v5spa= class="comment">         * ill observeod e;/ptranrrtnRUNNNDI * stat  IOW,ed ranourther5/spa="v5spa= class="comment">         s threit'WNOHADI G wa(2) 0  n ths_stopp /ptrae ptra  agaReiner5/spa="v5spa= class="comment">         ATTASR, n thG wa(2) may fail ducee td e;/ptranrrtnRUNNNDIoce5/spa="v5spa= class="comment">        ce5/spa="v5spa= class="comment">         * ely llowchin">task_is_stopp() taststhisafe aseg bot/ptransa	 hny
 spa="v5spa= class="comment">        le in d out of K_STOPP e arprotffenged bt;siglock.5/spa="v5spa= class="comment">         */5/spa="v        if *5a href="+code=task_is_stopped" class="sref">task_is_stopped
 a>(5a href="+code=tact" class="sref">tald
 )href="+code=group_stop_count" class="s3L102" id63L112" class="line" nam.63L112"31102
 a>           *5a href="+cod">tasket_">jobc_pe dchied" class="sref">tasket_">jobc_pe dchich
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+cod">JOBCT_PTPTL_STct" class="sref">JOBCT_PTPTL_STgs
 a>>, 5a href="+cod">JOBCT_PTPPNDING" class="sref">JOBCT_PTPPINGnd
 aaa>o              t;5a href="+cod">sign_wake_rogs" class="srefs>sign_wake_roch
 a>(5a href="+code=tact" class="sref">tald
 a>1a>);oo        5a href="+code=spiu_unlock" class="srefe=spiu_unlock
 a>(&5a href="+code=tact" class="sref">tald
 a>->5a href="+code=sighand" class="sref">sighand
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o        5a href="+code rvgnal" class="sref  rvgnch
 a> = 0;otaskliED" class="srefunlnloc">tasklich
 :);o        5a href="+codwritein_unlock_irq" class="srefwritein_unlock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o        5a href="+codmutexiu_unlock" class="srefmutexiu_unloch
 a>(&5a href="+code=tact" class="sref">tald
 a>->5a href="+code=signal" class="sref">signal
 a>->5a href="+coderac_s gud_mutexnt" class="sref"rac_s gud_mutexnt
 a>);o        if t35a href="+code=rvgnal" class="sref  rvgnch
 as) {v                5a href="+codG wa_on_budED" class="srefG wa_on_budch
 a>(&5a href="+code=tact" class="sref">tald
 a>->5a href="+code=jobctl" class="sref">jobctl
 a>, 5a href="+cod">JOBCT_PTPPING_BITED" class="sref">JOBCT_PTPPING_BITtl
 a {v                            5a href="+cod__ptrac/ptp=spg_sleep_fnce" class="srefe=ptrac/ptp=spg_sleep_fntl
 a>, 5a href="+cod7;TASUNNDTERRUPTIBLAgs" class="sref7;TASUNNDTERRUPTIBLAnt
 a>);o                5a href="+codn_pr>__ptracconnffeorrq" class="srefn_pr>__ptracconnffeorch
 a>(5a href="+code=tact" class="sref">tald
 a>, 5a href="+codT_PTRACATTASRCH" class="sref">PTRACATTASRld
 )gt;o      a>}o        returt35a href="+code=rvgnal" class="sref  rvgnch
 gt;o}oo5spa= class="comment/* ce5/spa="v5spa= class="comment"  __ptrac_ptrame  --  helperly fo">PTRAC>PTRAMEce5/spa="v5spa= class="comment" ce5/spa="v5spa= class="comment"* Peronfohit chesin d kets ">PT_PTRACck.5/spa="v5spa= class="comment"* Should * be usegyoell __ptraism*leommeera	   y fo">PTRAC>PTRAMEck.5/spa="v5spa= class="comment"  */5/spa="vstatic
int35a href="+code=ptrac_ptramece" class="srefe=ptrac/ptramech
 avoidaa>o       
int35a href="+cod  ral" class="sref  rch
 a> = -5a href="+codePERMCH" class="sref"PERMch
 >);oo        5a href="+codwritein_lock_irq" class="srefwritein_lock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o        5spa= class="comment"> Are * wald readbechin"ptrad?"  */5/spa="v        if t35a href="+code=current" class="sref">current
 a>->5a href="+code=ptrace" class="srefe=ptrach
 as) {v               (5a href="+code=ret" class="sref">ret
 a>   5a href="+cods/securi>__ptrac_ptramece" class="srefs/securi>__ptrac_ptramech
 a>(5a href="+code=current" class="sref">current
 a>->5a href="+codeaurrent" class="srefeaurreck
 a>);o                5spa= class="comment">*/5/spa="v5spa= class="comment">               * C checPF_EXITNDI to ensure a>-&gd rl_eaurre has not pclaeand5/spa="v5spa= class="comment">               * __exil/ptra(). Ourthwise * wd don'reporecf therr fobuner5/spa="v5spa= class="comment">               * p">re d a>-&gd rl_eaurre untptra  us right afterl  retuck.5/spa="v5spa= class="comment">               * */5/spa="v                if t35a href="+code=ret" class="sref">ret
 a) && a>(5a href="+code=current" class="sref">current
 a>->5a href="+codd rl_eaurreet" class="sref">rl_eaurrent
 a>->5a href="+code=flags" class="sref">flags
 a> & 5a href="+code=PEXITNDICH" class="sref"=PEXITNDInd
 aas) {v                      t35a href="+code=current" class="sref">current
 a>->5a href="+code=ptrace" class="srefe=ptrach
 a == 5a href="+cod">PT_PTRACED" class="sref">PT_PTRACED
 gt;o                      = 5a href="+cod">__ptrac="lact" class="sref">__ptrac="lach
 a>(5a href="+code=current" class="sref">current
 a>, 5a href="+code=current" class="sref">current
 a>->5a href="+codd rl_eaurreet" class="sref">rl_eaurrent
 a>);o              a>}o      a>}o        5a href="+codwritein_unlock_irq" class="srefwritein_unlock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);oo        retur  5a href="+code=ret" class="sref">ret
 a>;o}o;o5spa= class="comment">*/5/spa="v5spa= class="comment"* Callednd witk_is disapdud,   retusn"pue   ie chis should ">r uf tmselvesck.5/spa="v5spa= class="comment"  */5/spa="vstatic
int35a href="+codignorspg_e chiurret" class="srefignorspg_e chiurrch
 a>(struct35a href="+cod">sighask_struct" class="sref">sighask_stru78
 a*t35a href="+cod">sict" class="sref">sick
 a="v       
int35a href="+cod  ral" class="sref  rch
 a>;o        5a href="+code=spiunlock" class="sref">spiunlock
 a>(&5a href="+cod">sict" class="sref">sick
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o        5a href="+code=ret" class="sref">ret
 a> ft35a href="+cods>sict" class="sref">sick
 a>->5a href="+codafea	 ct" class="srefafea	 ck
 [t;5a href="+codSIGCHLCED" class="srefSIGCHLCck
 a1].t35a href="+codsact" class="sref"ack
 .t35a href="+codsa_ighalerrq" class="srefsa_ighaleret
 a> == 5a href="+codP_S_IGNED" class="srefSIG_IGNch
 as||);o            ft35a href="+cods>sict" class="sref">sick
 a>->5a href="+codafea	 ct" class="srefafea	 ck
 [t;5a href="+codSIGCHLCED" class="srefSIGCHLCck
 a1].t35a href="+codsact" class="sref"ack
 .t35a href="+codsa_e=flags" class="srefsa_e=flags
 a> & 5a href="+codSA_NOCLDWAITED" class="srefSA_NOCLDWAITck
 a>);o        5a href="+code=spiu_unlock" class="srefe=spiu_unlock
 a>(&5a href="+cod">sict" class="sref">sick
 a>->5a href="+code=siglock" class="sref">siglock
 a>);o        returt35a href="+cod  ral" class="sref  rch
 a>;o}o5spa= class="comment">*/5/spa="v5spa= class="comment"* Callednd wit">tasklist_lo helany fowritspgck.5/spa="v5spa= class="comment"* Un="la an"ptradt">ta,ld aneleanai9;up   ii9;was an"ptradtzombiaoce5/spa="v5spa= class="comment"  R retur"pue   ii9;neacs to * b">r ednd witreleasec">ta()oce5/spa="v5spa= class="comment"* (We ca on'cell releasec">ta() here becae up* wald readholdt">tasklist_lo.)ce5/spa="v5spa= class="comment">*/5/spa="v5spa= class="comment"  * Iitit'atzombia,is oue attaedness p">vrreednnormalal pare notificaea	 ck5/spa="v5spa= class="comment"*ng oself-">r spgc  Do notificaea	  now   ii9;would have happe ednearlieroce5/spa="v5spa= class="comment"* * Iit should ">r uitself,   retur"pueoce5/spa="v5spa= class="comment" ce5/spa="v5spa= class="comment"  * Iitit's ouownie chi, n tre is no notificaea	  to do. But   is ounormalce5/spa="v5spa= class="comment"* e chiurroself-">r , n tner thhe chilwas p">vrreednby __ptraid an* wmuiner5/spa="v5spa= class="comment"* ">r uit now, iurn a9;ce up* wmuinwalso wake;up sub-s thres sleepchini ck5/spa="v5spa= class="comment"  do_G wa()oce5/spa="v5spa= class="comment"* */5/spa="vstatit35a href="+code=bool" class="sref">bool
 a> 5a href="+cod">__ptracdeattach" class="sref">__ptracdeattach
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+codeptrarrq" class="srefeptrarnt
 a>>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+cod_up" class="srefeck
 a="v        5a href="+code=bool" class="sref">bool
 a> 5a href="+coddhreol" class="srefdhrech
 a>;oo        5a href="+cod">__ptracun="lact" class="sref">__ptracun="lach
 a>(5a href="+cod_up" class="srefeck
 aa>;oo        ift35a href="+cod_up" class="srefeck
 a>->5a href="+cod__exit_state" class="sref__exit_stant
  !=  -5a href="+codeXIT_ZOMBIAgs" class="srefeXIT_ZOMBIAck
 a="v                returt35a href="+codfalsate" class="sreffalsach
 a>;oo        5a href="+coddhreol" class="srefdhrech
  =r t35a href="+cods thre_d gro_leadarrq" class="srefe thre_d gro_leadarch
 a>(5a href="+cod_up" class="srefeck
 aa>;oo        if   5a href="+coddhreol" class="srefdhrech
  ) &&t35a href="+cods thre_d gro_emptiED" class="srefs thre_d gro_emptich
 a>(5a href="+cod_up" class="srefeck
 aas) {v                if t35a href="+cods na_s thre_d grogs" class="srefs na_s thre_d groch
 a>(5a href="+cod_up" class="srefeck
 a>->5a href="+codd rl_eaurreet" class="sref">rl_eaurrent
 a>, 5a href="+codeptrarrq" class="srefeptrarnt
 aaa>o                      t35a href="+coddhreol" class="srefdhrech
  =rt35a href="+coddo_notify_eaurreet" class="srefdo_notify_eaurrech
 a>(5a href="+cod_up" class="srefeck
 a>, 5a href="+cod_up" class="srefeck
 a>->5a href="+cod__exit=signal" class="sref__exit=signck
 aa>;o              e els  ift35a href="+codignorspg_e chiurret" class="srefignorspg_e chiurrch
 a, 5a href="+codeptrarrq" class="srefeptrarnt
 a>->5a href="+code=sighand" class="sref">sighand
 aas) {v                        5a href="+cod">wake_ro_eaurreet" class="sref">wake_ro_eaurrech
 a>(5a href="+cod_up" class="srefeck
 a>, 5a href="+codeptrarrq" class="srefeptrarnt
 aa>;o                      t35a href="+coddhreol" class="srefdhrech
  =rt35a href="+cod"puerq" class="srefepuach
 a>;o              a>}o      a>}o        5spa= class="comment"> Mari ituas iurn thn_press ofdbechin">r ed."* */5/spa="v        ift35a href="+coddhreol" class="srefdhrech
 aa>o                5a href="+cod_up" class="srefeck
 a>->5a href="+cod__exit_state" class="sref__exit_stant
  =  -5a href="+codeXIT_DEACED" class="srefeXIT_DEACch
 a>;o        returt35a href="+coddhreol" class="srefdhrech
 a>;o}ostatic
int35a href="+cod__ptracdeattach" class="sref__ptracdeattach
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 a>unt_siused
int35a href="+coddatact" class="srefdatach
 aa>o        5a href="+code=bool" class="sref">bool
 a> 5a href="+coddhreol" class="srefdhrech
  =rt35a href="+codfalsate" class="sreffalsach
 a>;oo        if t35a href="+codvalidit=signal" class="srefvalidit=signch
 a>(5a href="+coddatact" class="srefdatach
 aaa>o                retur= -5a href="+codeIOCH" class="sref"IOch
 >);o;o        5spa= class="comment"> Are ctffeure-specific hardwe ardisapdu .."* */5/spa="v        5a href="+cod__ptracdisapduch" class="sref__ptracdisapduch
 a>(5a href="+code chict" class="srefe chick
 aa>;o        5a href="+codelear_ttass thre_e=flct" class="srefelear_ttass thre_e=flch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+cod7IF_SYSCALL__PTRAgs" class="sref7IF_SYSCALL__PTRAck
 aa>;oo        5a href="+codwritein_lock_irq" class="srefwritein_lock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o      a>5spa= class="comment">*/5/spa="v5spa= class="comment">         T thhe chilcspab wald readkilled. Make sure da_s thre() oher5/spa="v5spa= class="comment">         s ousub-s thre dochindo_G wa()rdid on'do releasec">ta() yetoce5/spa="v5spa= class="comment">         */5/spa="v        ift35a href="+code chict" class="srefe chick
 a>->5a href="+code=ptrace" class="srefe=ptrach
 as) {v              t;5a href="+code chict" class="srefe chick
 a>->5a href="+cod__exi"+cote" class="sref__exi"+coch
  =rt35a href="+coddatact" class="srefdatach
 >);o              > 5a href="+coddhreol" class="srefdhrech
  =rt35a href="+cod">__ptracdeattach" class="sref">__ptracdeattach
 at;5a href="+code=current" class="sref">current
 a>, 5a href="+code chict" class="srefe chick
 aa>;o      a>}o        5a href="+codwritein_unlock_irq" class="srefwritein_unlock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);oo        5a href="+codn_pr>__ptracconnffeorrq" class="srefn_pr>__ptracconnffeorch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+cod">PTRACDETASRCH" class="sref">PTRACDETASRck
 a>);o        ift35a href="+codunlikeliED" class="srefunlikeliCE
 a>(5a href="+coddhreol" class="srefdhrech
 aaa>o              t;5a href="+codd leasec">taet" class="sref">leasec">tach
 a>(5a href="+code chict" class="srefe chick
 aa>;oo        retur= 0;o}oo5spa= class="comment">*/5/spa="v5spa= class="comment"  Deattaoell ">tasp* wwtre uschin__ptraion. Callednd wit">taskli hela*/5/spa="v5spa= class="comment"* y fowritspg,ld an  retusnd witki hela too. But notetki cspa">lease*/5/spa="v5spa= class="comment"* d an  acquireod e;iglock.5/spa="v5spa= class="comment"  */5/spa="vtask_struct
 a> *5a href="+codeptrarrq" class="srefeptrarnt
 aa>o        5a href="+cod__">leaseegs" class="sref">">leaseech
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 aa>o        5a href="+cod__acquireegs" class="sref">acquireech
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 aa>o      >(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+cod_up" class="srefeck
 ,a> *5a href="+codret" class="srefnch
 >);o        5a href="+codLIST_HEACED" class="srefLIST_HEACch
 a>(5a href="+cod__ptracdereol" class="sref__ptracdereck
 aa>;oo        ift35a href="+codlikeliED" class="sreflikeliCE
 a>(5a href="+codsklisemptiED" class="srefsklisemptich
 a>(&5a href="+codeptrarrq" class="srefeptrarnt
 a>->5a href="+codl/ptraeol" class="sref__ptraech
 aaaa>o                retua>;oo        5a href="+codsklisy f_ ach_mmery_safeED" class="srefsklisy f_ ach_mmery_safech
 a>(5a href="+cod_up" class="srefeck
 a>, 5a href="+codret" class="srefnch
 , >(&5a href="+codeptrarrq" class="srefeptrarnt
 a>->5a href="+codl/ptraeol" class="sref__ptraech
 a>, 5a href="+cod__ptracmmeryol" class="sref__ptracmmerych
 as) {v                ift35a href="+cod">__ptracdeattach" class="sref">__ptracdeattach
 at;5a href="+codeptrarrq" class="srefeptrarnt
 a>>(5a href="+cod_up" class="srefeck
 aaa>o              a>        5a href="+codsklisadeol" class="srefsklisadech
 a>(&5a href="+cod_up" class="srefeck
 a>->5a href="+cod__ptracmmeryol" class="sref__ptracmmerych
 , >(&5a href="+cod__ptracdereol" class="sref__ptracdereck
 aa>;o      a>}oo        5a href="+codwritein_unlock_irq" class="srefwritein_unlock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o        5a href="+codBUG_ONED" class="srefBUG_ONch
 a t35a href="+codsklisemptiED" class="srefsklisemptich
 a>(&5a href="+codeptrarrq" class="srefeptrarnt
 a>->5a href="+codl/ptraeol" class="sref__ptraech
 aa>);oo        5a href="+codsklisy f_ ach_mmery_safeED" class="srefsklisy f_ ach_mmery_safech
 a>(5a href="+cod_up" class="srefeck
 a>, 5a href="+codret" class="srefnch
 , >(&5a href="+cod__ptracdereol" class="sref__ptracdereck
 a>, 5a href="+cod__ptracmmeryol" class="sref__ptracmmerych
 as) {v      a>        5a href="+codsklisdel_inudED" class="srefsklisdel_inudch
 a>(&5a href="+cod_up" class="srefeck
 a>->5a href="+cod__ptracmmeryol" class="sref__ptracmmerych
 a>);o              t;5a href="+codd leasec">taet" class="sref">leasec">tach
 a>(5a href="+cod_up" class="srefeck
 aa>;o      a>}o;o        5a href="+codwritein_lock_irq" class="srefwritein_lock_ich
 a>(&5a href="+code=tasklist_lock" class="sref">tasklist_lock
 a>);o}otask_struct
 a> *5a href="+codetact" class="sref"tald
 a>unt_siuselong   5a href="+codercct" class="srefercld
 a>char   5a href="+cod__userch" class="sref">userct
 a> *5a href="+coddliED" class="srefdsent
 a>c
int35a href="+codlrret" class="sreflrrch
 aa>o       
int35a href="+codcopiaeol" class="srefcopiaech
  =r= 0;oo      whileift35a href="+codlrret" class="sreflrrch
  >-&g 0as) {v              char   5a href="+codbufet" class="srefbuf09
 [128] 0;o               
int35a href="+codr th_lrret" class="srefr th_lrrck
 a>, 5a href="+code=rvgnal" class="sref  rvgnch
 gt;oo              > 5a href="+codr th_lrret" class="srefr th_lrrck
 a> ft35a href="+codlrret" class="sreflrrch
  >-&g sizeofft35a href="+codbufet" class="srefbuf09
 )) ? sizeofft35a href="+codbufet" class="srefbuf09
 ) :nt35a href="+codlrret" class="sreflrrch
 gt;o              t;5a href="+code rvgnal" class="sref  rvgnch
 a> t;5a href="+codacress_n_press_vmal" class="srefacress_n_press_vmch
 at;5a href="+codetact" class="sref"tald
 a>  5a href="+codercct" class="srefercld
 a>t35a href="+codbufet" class="srefbuf09
 a>, 5a href="+code th_lrret" class="srefr th_lrrck
 a>0a>);o                if t35a href="+code=rvgnal" class="sref  rvgnch
 as) {v                        ift35a href="+codeopiaeol" class="srefcopiaech
 aa>o                              bthrk>);o      a>                retur= -5a href="+codeIOCH" class="sref"IOch
 >);o              a>}o                ift35a href="+codcopy_to_userch" class="srefcopy_to_userch
 at;5a href="+coddliED" class="srefdsent
 a>t35a href="+codbufet" class="srefbuf09
 a>, 5a href="+code=rvgnal" class="sref  rvgnch
 aaa>o              a>        retur= -5a href="+codeFAULTED" class="srefeFAULTch
 >);o              t;5a href="+codeopiaeol" class="srefcopiaech
  +> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o              > 5a href="+codercct" class="srefercld
  +> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o              t;5a href="+coddliED" class="srefdsent
  +> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o                5a href="+codlrret" class="sreflrrch
  -> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o      a>}o        returt35a href="+codeopiaeol" class="srefcopiaech
 gt;o}otask_struct
 a> *5a href="+codetact" class="sref"tald
 a>char   5a href="+cod__userch" class="sref">userct
 a> *5a href="+codercct" class="srefercld
 a>unt_siuselong   5a href="+coddliED" class="srefdsent
 a>c
int35a href="+codlrret" class="sreflrrch
 aa>o       
int35a href="+codcopiaeol" class="srefcopiaech
  =r= 0;oo      whileift35a href="+codlrret" class="sreflrrch
  >-&g 0as) {v              char   5a href="+codbufet" class="srefbuf09
 [128] 0;o               
int35a href="+codr th_lrret" class="srefr th_lrrck
 a>, 5a href="+code=rvgnal" class="sref  rvgnch
 gt;o      a>        5a href="+codr th_lrret" class="srefr th_lrrck
 a> ft35a href="+codlrret" class="sreflrrch
  >-&g sizeofft35a href="+codbufet" class="srefbuf09
 )) ? sizeofft35a href="+codbufet" class="srefbuf09
 ) :nt35a href="+codlrret" class="sreflrrch
 gt;o                ift35a href="+codcopy_from_userch" class="srefcopy_from_userch
 at;5a href="+codbufet" class="srefbuf09
 a>, 5a href="+codercct" class="srefercld
 a>t35a href="+codr th_lrret" class="srefr th_lrrck
 aaa>o              a>        retur= -5a href="+codeFAULTED" class="srefeFAULTch
 >);o                5a href="+code rvgnal" class="sref  rvgnch
 a> t;5a href="+codacress_n_press_vmal" class="srefacress_n_press_vmch
 at;5a href="+codetact" class="sref"tald
 a>  5a href="+coddliED" class="srefdsent
 a>t35a href="+codbufet" class="srefbuf09
 a>, 5a href="+codr th_lrret" class="srefr th_lrrck
 a>1a>);o                if t35a href="+code=rvgnal" class="sref  rvgnch
 as) {v                        ift35a href="+codeopiaeol" class="srefcopiaech
 aa>o                              bthrk>);o                        retur= -5a href="+codeIOCH" class="sref"IOch
 >);o              a>}o                5a href="+codeopiaeol" class="srefcopiaech
  +> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o      a>        5a href="+codercct" class="srefercld
  +> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o              t;5a href="+coddliED" class="srefdsent
  +> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o                5a href="+codlrret" class="sreflrrch
  -> t;5a href="+code=rvgnal" class="sref  rvgnch
 gt;o      a>}o        returt35a href="+codeopiaeol" class="srefcopiaech
 gt;o}ostatic
int35a href="+cod__ptracsetopra	  ct" class="sref__ptracsetopra	  ch
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 a>unt_siuselong   5a href="+coddatact" class="srefdatach
 aa>o      unt_siuse  5a href="+code=flags" class="sref">flags
 gt;oo        if  5a href="+coddatact" class="srefdatach
 a> &~(unt_siuselong)  5a href="+cod">PTRACO_MASKct" class="sref">PTRACO_MASKch
 aa>o                retur= -5a href="+codeINVALCH" class="sref"INVALgs
 gt;o;o        5spa= class="comment"> Avoid c
iermediate t_sta w tneell oprs e arelearuse  */5/spa="v        5a href="+code=flags" class="sref">flags
 a> t;5a href="+code chict" class="srefe chick
 a>->5a href="+code=ptrace" class="srefe=ptrach
 gt;o        5a href="+code=flags" class="sref">flags
 a> &am=p~(  5a href="+cod">PTRACO_MASKct" class="sref">PTRACO_MASKch
  <<>, 5a href="+cod">_O">_FLAG_SHIFTED" class="sref">_O">_FLAG_SHIFTch
 agt;o        5a href="+code=flags" class="sref">flags
 a|> ft35a href="+coddatact" class="srefdatach
 a>lt;<>, 5a href="+cod">_O">_FLAG_SHIFTED" class="sref">_O">_FLAG_SHIFTch
 agt;o        5a href="+code chict" class="srefe chick
 a>->5a href="+code=ptrace" class="srefe=ptrach
  =rt35a href="+codf=flags" class="sref">flags
 gt;o        retur= 0;o}oostatic
int35a href="+cod__ptracgett_sinfoct" class="sref__ptracgett_sinfoch
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 a>  5a href="+code_sinfo_uct" class="sref">sinfo_uct
 a> *5a href="+codinfoct" class="srefinfoch
 aa>o      unt_siuselong   5a href="+codf=flags" class="sref">flags
 gt;o      c
int35a href="+coderrorrq" class="sreferrorch
  =r= -5a href="+codeSRSRCH" class="srefeSRSRgs
 gt;oo        ift35a href="+codl_loc">task=sighand" class="srefl_loc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 aas) {v                5a href="+coderrorrq" class="sreferrorch
  =r= -5a href="+codeINVALCH" class="sref"INVALgs
 gt;o      a>        ift35a href="+codlikeliED" class="sreflikeliCE
 a>(5a href="+code chict" class="srefe chick
 a>->5a href="+cod clxit=sinfoct" class="sref clxit=sinfo46
 a!=  -5a href="+codNULLCH" class="srefNULLgs
 aas) {v                      > *5a href="+codinfoct" class="srefinfoch
  =r> *5a href="+code chict" class="srefe chick
 a>->5a href="+cod clxit=sinfoct" class="sref clxit=sinfo46
 gt;o              a>        5a href="+coderrorrq" class="sreferrorch
  =r= 0;o              a>}o              t;5a href="+codn_unloc">task=sighand" class="srefn_unloc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 a 0;o      a>}o        returt35a href="+coderrorrq" class="sreferrorch
  0;o}oostatic
int35a href="+cod__ptracsett_sinfoct" class="sref__ptracsett_sinfoch
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 a>consuct35a href="+code_sinfo_uct" class="sref">sinfo_uct
 a> *5a href="+codinfoct" class="srefinfoch
 aa>o      unt_siuselong   5a href="+codf=flags" class="sref">flags
 gt;o      c
int35a href="+coderrorrq" class="sreferrorch
  =r= -5a href="+codeSRSRCH" class="srefeSRSRgs
 gt;o;o        ift35a href="+codl_loc">task=sighand" class="srefl_loc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 aas) {v              > 5a href="+coderrorrq" class="sreferrorch
  =r= -5a href="+codeINVALCH" class="sref"INVALgs
 gt;o                ift35a href="+codlikeliED" class="sreflikeliCE
 a>(5a href="+code chict" class="srefe chick
 a>->5a href="+cod clxit=sinfoct" class="sref clxit=sinfo46
 a!=  -5a href="+codNULLCH" class="srefNULLgs
 aas) {v                      > *5a href="+code chict" class="srefe chick
 a>->5a href="+cod clxit=sinfoct" class="sref clxit=sinfo46
  =r> *5a href="+codinfoct" class="srefinfoch
 gt;o                      t35a href="+coderrorrq" class="sreferrorch
  =r= 0;o              a>}o      a>        5a href="+codn_unloc">task=sighand" class="srefn_unloc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 a 0;o      a>}o        returt35a href="+coderrorrq" class="sreferrorch
  0;o}ooo, 5a href="+cod">PTRACSINGLESTEPct" class="sref">PTRACSINGLESTEP125/a>o, 5a href="+codis_schileste_up" class="srefis_schileste_ch
 at;5a href="+codrequeliED" class="srefrequeligs
 a  a>      (at;5a href="+codrequeliED" class="srefrequeligs
 a ==  -5a href="+cod">PTRACSINGLESTEPct" class="sref">PTRACSINGLESTEP125/aa>oo, 5a href="+codis_schileste_up" class="srefis_schileste_ch
 at;5a href="+codrequeliED" class="srefrequeligs
 a  a>      0a>oo, 5a href="+cod">PTRACSINGLEBLOCKct" class="sref">PTRACSINGLEBLOCK385/);o, 5a href="+codis_schilebt_lock" class="srefis_schilebt_loch
 at;5a href="+codrequeliED" class="srefrequeligs
 a  a>     (at;5a href="+codrequeliED" class="srefrequeligs
 a ==  -5a href="+cod">PTRACSINGLEBLOCKct" class="sref">PTRACSINGLEBLOCK385/aa>oo, 5a href="+codis_schilebt_lock" class="srefis_schilebt_loch
 at;5a href="+codrequeliED" class="srefrequeligs
 a  a>     0a>ooo, 5a href="+cod">PTRACSYSEMUct" class="sref">PTRACSYSEMU245/a>o, 5a href="+codis_sysemu_schileste_up" class="srefis_sysemu_schileste_ch
 at;5a href="+codrequeliED" class="srefrequeligs
 a  a(at;5a href="+codrequeliED" class="srefrequeligs
 a ==  -5a href="+cod">PTRACSYSEMUCSINGLESTEPct" class="sref">PTRACSYSEMUCSINGLESTEP385/aa>oo, 5a href="+codis_sysemu_schileste_up" class="srefis_sysemu_schileste_ch
 at;5a href="+codrequeliED" class="srefrequeligs
 a  a0a>oo;ostatic
int35a href="+cod__ptracresumace" class="srefe=ptracresumach
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 a>long   5a href="+codrequeliED" class="srefrequeligs
 ,>;o                       unt_siuselong   5a href="+coddatact" class="srefdatach
 aa>o        if t35a href="+codvalidit=signal" class="srefvalidit=signch
 a>(5a href="+coddatact" class="srefdatach
 aaa>o                retur= -5a href="+codeIOCH" class="sref"IOch
 >);o        ift35a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACSYSCALLct" class="sref">PTRACSYSCALLch
 aa>o              t;5a href="+codset_ttass thre_e=flct" class="srefset_ttass thre_e=flch
 at;5a href="+code chict" class="srefe chick
 a>t;5a href="+cod7IF_SYSCALL__PTRAgs" class="sref7IF_SYSCALL__PTRAck
 aa>;o      e ela>o                5a href="+codelear_ttass thre_e=flct" class="srefelear_ttass thre_e=flch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+cod7IF_SYSCALL__PTRAgs" class="sref7IF_SYSCALL__PTRAck
 aa>;oo, 5a href="+cod7IF_SYSCALL_EMUct" class="sref7IF_SYSCALL_EMU215/a>o        ift35a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACSYSEMUct" class="sref">PTRACSYSEMU245/ ||   5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACSYSEMUCSINGLESTEPct" class="sref">PTRACSYSEMUCSINGLESTEP385/aa>o              t;5a href="+codset_ttass thre_e=flct" class="srefset_ttass thre_e=flch
 at;5a href="+code chict" class="srefe chick
 a>t;5a href="+cod7IF_SYSCALL_EMUct" class="sref7IF_SYSCALL_EMU215/aa>;o      e ela>o                5a href="+codelear_ttass thre_e=flct" class="srefelear_ttass thre_e=flch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+cod7IF_SYSCALL_EMUct" class="sref7IF_SYSCALL_EMU215/aa>;oo        ift35a href="+codis_schilebt_lock" class="srefis_schilebt_loch
 at;5a href="+codrequeliED" class="srefrequeligs
 aas) {v                ift35a href="+codunlikeliED" class="srefunlikeliCE
 a t35a href="+codarch_has_bt_lo_ste_up" class="srefarch_has_bt_lo_ste_CE
 aaaaa>o                        retur= -5a href="+codeIOCH" class="sref"IOch
 >);o              t35a href="+coduser_enapdu_bt_lo_ste_up" class="srefuser_enapdu_bt_lo_ste_ch
 a>(5a href="+code chict" class="srefe chick
 aa>;o      } e el   ift35a href="+codis_schileste_up" class="srefis_schileste_ch
 at;5a href="+codrequeliED" class="srefrequeligs
 a ||   5a href="+codis_sysemu_schileste_up" class="srefis_sysemu_schileste_ch
 at;5a href="+codrequeliED" class="srefrequeligs
 aas) {v                ift35a href="+codunlikeliED" class="srefunlikeliCE
 a t35a href="+codarch_has_schile_ste_up" class="srefarch_has_schile_ste_CE
 aaaaa>o                        retur= -5a href="+codeIOCH" class="sref"IOch
 >);o                5a href="+coduser_enapdu_schile_ste_up" class="srefuser_enapdu_schile_ste_ch
 a>(5a href="+code chict" class="srefe chick
 aa>;o      } e el ) {v              t;5a href="+coduser_disapdu_schile_ste_up" class="srefuser_disapdu_schile_ste_ch
 a>(5a href="+code chict" class="srefe chick
 aa>;o      a>}o;o        5a href="+code chict" class="srefe chick
 a>->5a href="+cod__exi"+cote" class="sref__exi"+coch
  =rt35a href="+coddatact" class="srefdatach
 >);o        5a href="+codwake_up_t_stact" class="srefwake_up_t_stach
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+cod__TASK__PTRACED" class="sref__TASK__PTRACck
 aa>;o        retur= 0;o}o, 5a href="+codCONFIG_HAVE_ARCH__PTRAHOOKct" class="srefCONFIG_HAVE_ARCH__PTRAHOOK86
 );ostaticonsuc>(struct35a href="+coduser_regsetup" class="srefuser_regsetct
 a>);o      consuc>(struct35a href="+coduser_regsetup" class="srefuser_regsetct
 a>t;5a href="+codregsetup" class="srefregsetct
  0;o      c
int35a href="+codret" class="srefnch
 >);oo      y foa>(5a href="+codret" class="srefnch
  =r= nt35a href="+codret" class="srefnch
  <>, 5a href="+codviewup" class="srefviewct
 a>->5a href="+codret" class="srefnch
 > ++t;5a href="+codret" class="srefnch
 as) {v                5a href="+codregsetup" class="srefregsetct
  =rt35a href="+codviewup" class="srefviewct
 a>->5a href="+codregsetags" class="srefregsetact
  +nt35a href="+codret" class="srefnch
 >);o      a>        ift35a href="+codregsetup" class="srefregsetct
 a>->5a href="+codcore_note_rypact" class="srefcore_note_rypags
  ==  -5a href="+codrypact" class="srefrypa385/aa>o                        returt35a href="+codregsetup" class="srefregsetct
  0;o      a>}o;o        returt35a href="+codNULLCH" class="srefNULLgs
  0;o}ostatic
int35a href="+cod__ptracregsetup" class="sref__ptracregsetch
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+cod">taet" class="sref">tach
 a>c
int35a href="+codreirq" class="srefreict
 a>unt_siuse 
int35a href="+codrypact" class="srefrypa385/,>;o                      c>(struct35a href="+codiovecct" class="srefiovecct
 a> *5a href="+codkiovct" class="srefkiov385/aa>o      consuc>(struct35a href="+coduser_regset_viewup" class="srefuser_regset_viewct
 a> *5a href="+codviewup" class="srefviewct
  =rt35a href="+cod">tasuser_regset_viewup" class="sref">tasuser_regset_viewch
 a>(5a href="+cod">taet" class="sref">tach
 aa>;o      consuc>(struct35a href="+coduser_regsetup" class="srefuser_regsetct
 a>t;5a href="+codregsetup" class="srefregsetct
  =rt35a href="+codfind_regsetup" class="sreffind_regsetch
 a *5a href="+codviewup" class="srefviewct
 a> -5a href="+codrypact" class="srefrypa385/aa>;o      c
int35a href="+codregset_noct" class="srefregset_nogs
  0;o;o        if t35a href="+code=gsetup" class="srefregsetct
  ||ift35a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
  %>, 5a href="+codregsetup" class="srefregsetct
 a>->5a href="+codsizect" class="srefsizech
 as!=r=aa>o                retur= -5a href="+codeINVALCH" class="sref"INVALgs
 gt;o        5a href="+codregset_noct" class="srefregset_nogs
  =rt35a href="+code=gsetup" class="srefregsetct
  -rt35a href="+codviewup" class="srefviewct
 a>->5a href="+codregsetags" class="srefregsetact
 gt;o        5a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
  =rt35a href="+codmiret" class="srefmirch
 a *5a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 ,>;o                          a *5a href="+cod__="kern_size_uct" class="sref__="kern_size_uch
 asft35a href="+codregsetup" class="srefregsetct
 a>->5a href="+codret" class="srefnch
  *>, 5a href="+codregsetup" class="srefregsetct
 a>->5a href="+codsizect" class="srefsizech
 aaa>;oo        if  5a href="+codreirq" class="srefreict
  ==  -5a href="+cod">PTRACGETREGSETED" class="sref">PTRACGETREGSET385/aa>o                returt;5a href="+codcopy_regset_to_userch" class="srefcopy_regset_to_userch
 a>(5a href="+cod">taet" class="sref">tach
 a> -5a href="+codviewup" class="srefviewct
 a> -5a href="+codregset_noct" class="srefregset_nogs
 , 0,>;o              a>                          *5a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 ,  *5a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_basect" class="srefiov_base385/aa>;o      e ela>o                returt;5a href="+codcopy_regset_from_userch" class="srefcopy_regset_from_userch
 a>(5a href="+cod">taet" class="sref">tach
 a> -5a href="+codviewup" class="srefviewct
 a> -5a href="+codregset_noct" class="srefregset_nogs
 , 0,>;o                a>                          *5a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 ,  *5a href="+codkiovct" class="srefkiov385/a>->5a href="+codiov_basect" class="srefiov_base385/aa>;o}ooootask_struct
 a> *5a href="+code chict" class="srefe chick
 a>long   5a href="+codrequeliED" class="srefrequeligs
 ,>;o              a> unt_siuselong   5a href="+codaddrch" class="srefaddrct
 a>unt_siuselong   5a href="+coddatact" class="srefdatach
 aa>o        5a href="+codboonal" class="srefboon99
 at;5a href="+codseizeict" class="srefseizeich
  =rt35a href="+code chict" class="srefe chick
 a>->5a href="+code=ptrace" class="srefe=ptrach
  > & -5a href="+cod">_SEIZACED" class="sref">_SEIZACct
 gt;o      c
int35a href="+codreiED" class="srefretct
  =r= -5a href="+codeIOCH" class="sref"IOch
 >);o        5a href="+code_sinfo_uct" class="sref">sinfo_uct
 a  5a href="+code_sinfoct" class="sref">sinfoct
 a>> *5a href="+codsict" class="sref">ch
 >);o      void  *5a href="+cod__userch" class="sref">userct
 a> *5a href="+coddatav_up" class="srefdatav_ct
  =r(void  *5a href="+cod__userch" class="sref">userct
 a>)rt35a href="+coddatact" class="srefdatach
 >);o      unt_siuselong   5a href="+cod__userch" class="sref">userct
 a> *5a href="+coddatal_up" class="srefdatalpch
  =rt35a href="+coddatav_up" class="srefdatav_ct
 >);o      unt_siuselong   5a href="+codf=flags" class="sref">flags
 gt;oo      switchift35a href="+codrequeliED" class="srefrequeligs
 as) {v      case  -5a href="+cod">PTRACPEEKTEXTED" class="sref">PTRACPEEKTEXT09
 : {v      case  -5a href="+cod">PTRACPEEKDATAED" class="sref">PTRACPEEKDATA09
 : {v                returt;5a href="+codgeneric___ptracpeekdatact" class="srefgeneric___ptracpeekdatach
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codaddrch" class="srefaddrct
 a>  5a href="+coddatact" class="srefdatach
 agt;o      case  -5a href="+cod">PTRACPOKETEXTED" class="sref">PTRACPOKETEXT09
 : {v      case  -5a href="+cod">PTRACPOKEDATAED" class="sref">PTRACPOKEDATA09
 : {v                returt;5a href="+codgeneric___ptracpokedatact" class="srefgeneric___ptracpokedatach
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codaddrch" class="srefaddrct
 a>  5a href="+coddatact" class="srefdatach
 agt;oo, 5a href="+cod">PTRACOLDSETOPTIONSED" class="sref">PTRACOLDSETOPTIONS455/a>o      case  -5a href="+cod">PTRACOLDSETOPTIONSED" class="sref">PTRACOLDSETOPTIONS455/: {vo      case  -5a href="+cod">PTRACSETOPTIONSED" class="sref">PTRACSETOPTIONS455/: {v                5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracsetopra	  ct" class="sref__ptracsetopra	  ch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+coddatact" class="srefdatach
 agt;o              bthrk>);o      case  -5a href="+cod">PTRACGETEVENTMSGED" class="sref">PTRACGETEVENTMSG455/: {v                5a href="+code rED" class="srefretct
  =rt35a href="+cod_ut_userch" class="sref_ut_userch
 a>(5a href="+code chict" class="srefe chick
 a>->5a href="+code=ptra_messagace" class="srefe=ptra_messagack
 a>, 5a href="+coddatal_up" class="srefdatalpch
 agt;o              bthrk>);oo      case  -5a href="+cod">PTRACGETSIGINFOCH" class="sref">PTRACGETSIGINFO455/: {v      a>        5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracgett_sinfoct" class="sref__ptracgett_sinfoch
 a>(5a href="+code chict" class="srefe chick
 a>>(&5a href="+code_sinfoct" class="sref">sinfoct
 agt;o                if t35a href="+code=rED" class="srefretct
 aa>o              a>        5a href="+code rED" class="srefretct
  =rt35a href="+codcopy_">sinfo_uo_userch" class="srefcopy_">sinfo_uo_userch
 a>(5a href="+coddatav_up" class="srefdatav_ct
 a>>(&5a href="+code_sinfoct" class="sref">sinfoct
 agt;o              bthrk>);oo      case  -5a href="+cod">PTRACSETSIGINFOCH" class="sref">PTRACSETSIGINFO455/: {v                ift35a href="+codcopy_from_userch" class="srefcopy_from_userch
 a>(&5a href="+code_sinfoct" class="sref">sinfoct
 a>, 5a href="+coddatav_up" class="srefdatav_ct
 a>sizeof>, 5a href="+code_sinfoct" class="sref">sinfoct
 aaa>o              a>        5a href="+code rED" class="srefretct
  =r= -5a href="+codeFAULTED" class="srefeFAULTgs
 gt;o              e ela>o              a>        5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracsett_sinfoct" class="sref__ptracsett_sinfoch
 a>(5a href="+code chict" class="srefe chick
 a>>(&5a href="+code_sinfoct" class="sref">sinfoct
 agt;o      a>      bthrk>);o      case  -5a href="+cod">PTRACINTERRUPTED" class="sref">PTRACINTERRUPT455/: {v                5spa= class="comment">*/5/spa="v      * Stop /ptrae without any>side-effect on t=sign or job*/5/spa="v      * control.  At least one /ptp is guaranteed to happrrch5/spa="v      * after this requeli.  If @e chi is althrey /ptpped, thech5/spa="v      * currmme /ptp is not disturbed and another /ptp willch5/spa="v      * happrr after the currmme /ptp is ended with ">PTRACCONT.ch5/spa="v      *ch5/spa="v      * The actugn /ptp might not be ">PTRACEVENT_STOP /ptp butch5/spa="v      * the pending condira	  is elearuseregardless.ch5/spa="v      */ch5/spa="v                ift35a href="+codunlikeliED" class="srefunlikeliCE
 a t35a href="+codseizeict" class="srefseizeich
  ||  t35a href="+codl_loc">task=sighand" class="srefl_loc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 aaaa>o                      bthrk>);oo                5spa= class="comment">*/5/spa="v      * INTERRUPT doesn't disturb existing /ptp sans one*/5/spa="v      * excepra	 .  If l/ptrar issuuseLISTEN y fothe currmme*/5/spa="v      * STOP, this INTERRUPT shouhi eleareLISTEN and re-/ptp*/5/spa="v      * /ptrae into STOP.ch5/spa="v      */ch5/spa="v                ift35a href="+codlikeliED" class="sreflikeliCE
 a>(5a href="+cod">tasket_jobctl_pendingED" class="sref">tasket_jobctl_pendingch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codJOBCTL__PTP_STOPct" class="srefJOBCTL__PTP_STOPgs
 aaaa>o              a>      p;5a href="+code_sign_wake_upct" class="sref">sign_wake_upch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+code chict" class="srefe chick
 a>->5a href="+codjobctlct" class="srefjobctl20
 a> & -5a href="+codJOBCTL_LISTENINGED" class="srefJOBCTL_LISTENINGct
 agt;oo              t35a href="+codu_unloc">task=sighand" class="srefn_unloc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 a 0;o                5a href="+code rED" class="srefretct
  =r= 0;o              bthrk>);oo      case  -5a href="+cod">PTRACLISTENED" class="sref">PTRACLISTEN455/: {v      a>        5spa= class="comment">*/5/spa="v      * Listrr y foevmmes.  Tptrae must be in STOP.  It's not*/5/spa="v      * resumad per-se but is not considered to be in _PTRAC by*/5/spa="v      * wait(2) or l/ptra(2).  If spaasyncoevmme (e.g. group*/5/spa="v      * stop t_sta cighge) happrrs, /ptrae will mmear STOP /ptp*/5/spa="v      * agai .  Alearnativeli, l/ptrar can issuu INTERRUPT to*/5/spa="v      * finish listrring and re-/ptp /ptrae into STOP.ch5/spa="v      */ch5/spa="v                ift35a href="+codunlikeliED" class="srefunlikeliCE
 a t35a href="+codseizeict" class="srefseizeich
  ||  t35a href="+codl_loc">task=sighand" class="srefl_loc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 aaaa>o              a>      bthrk>);oo              t;5a href="+codsict" class="sref">ch
  =rt35a href="+code chict" class="srefe chick
 a>->5a href="+codlclxit=sinfoct" class="sref clxit=sinfo46
 >);o                ift35a href="+codlikeliED" class="sreflikeliCE
 a>(5a href="+codsict" class="sref">ch
  >(&am> &a>(5a href="+codsict" class="sref">ch
 a>->5a href="+codsii"+cote" class="srefsii"+coch
  >-&g>-&g 8a ==  -5a href="+cod">PTRACEVENT_STOPED" class="sref">PTRACEVENT_STOPgs
 aas) {v              a>      p;5a href="+code chict" class="srefe chick
 a>->5a href="+codjobctlct" class="srefjobctl20
 a|=  -5a href="+codJOBCTL_LISTENINGED" class="srefJOBCTL_LISTENINGct
 >);o                        5spa= class="comment">*/5/spa="v              * If NOTIFY is set, it means evmme happrred betwerrch5/spa="v              * t_srt of this /ptp and now.  Tpiggar re-/ptp.ch5/spa="v              */ch5/spa="v                        ift35a href="+codc chict" class="srefe chick
 a>->5a href="+codjobctlct" class="srefjobctl20
 a> & -5a href="+codJOBCTL__PTP_NOTIFYct" class="srefJOBCTL__PTP_NOTIFYct
 aa>o                               ;5a href="+code_sign_wake_upct" class="sref">sign_wake_upch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codtruote" class="sreftruogs
 a 0;o      a>               ;5a href="+code rED" class="srefretct
  =r= 0;o              a>}o              t35a href="+codu_unloc">task=sighand" class="srefn_unloc">task=sighach
 at;5a href="+code chict" class="srefe chick
 a>>(&5a href="+codf=flags" class="sref">flags
 a 0;o              bthrk>);oo      case  -5a href="+cod">PTRACDETACHED" class="sref">PTRACDETACH455/:      t 5spa= class="comment"> detach a process /hat was attached. */ch5/spa="v                5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracdetachct" class="sref__ptracdetachch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+coddatact" class="srefdatach
 agt;o              bthrk>);oo, 5a href="+codCONFIG_BINFMT_ELF_FDPICct" class="srefCONFIG_BINFMT_ELF_FDPIC455/a>o      case  -5a href="+cod">PTRACGETFDPICct" class="sref">PTRACGETFDPIC455/: ) {v              >(struct35a href="+codmmsk_struct" class="srefmmsk_stru98
 a> *5a href="+codmmct" class="srefmmct
  =rt35a href="+codget_t>tasmmct" class="srefget_t>tasmmch
 a>(5a href="+code chict" class="srefe chick
 agt;o              unt_siuselong   5a href="+codtmpct" class="sreftmpct
  =r= 0;o;o                5a href="+code rED" class="srefretct
  =r= -5a href="+codeSRCHED" class="srefeSRCHct
 >);o                if t35a href="+codmmct" class="srefmmct
 aa>o                a>    bthrk>);oo              switchift35a href="+codaddrch" class="srefaddrct
 as) {v              case  -5a href="+cod">PTRACGETFDPIC_EXECct" class="sref">PTRACGETFDPIC_EXEC455/: {v      a>               ;5a href="+codtmpct" class="sreftmpct
  =rt35a href="+codmmct" class="srefmmct
 a>->5a href="+codcontexrED" class="srefcontexrct
 .t;5a href="+codexec_fdpic_loadmapct" class="srefexec_fdpic_loadmapct
 >);o                      bthrk>);o              case  -5a href="+cod">PTRACGETFDPIC_INTERPED" class="sref">PTRACGETFDPIC_INTERP455/: {v              a>      p;5a href="+codtmpct" class="sreftmpct
  =rt35a href="+codmmct" class="srefmmct
 a>->5a href="+codcontexrED" class="srefcontexrct
 .t;5a href="+codimearp_fdpic_loadmapct" class="srefimearp_fdpic_loadmapct
 >);o                      bthrk>);o              default: {v                a>    bthrk>);o              a>}o              t35a href="+codmmpuuct" class="srefmmputch
 a *5a href="+codmmct" class="srefmmct
 a>);o      a>        5a href="+code rED" class="srefretct
  =rt35a href="+cod_ut_userch" class="sref_ut_userch
 a>(5a href="+codtmpct" class="sreftmpct
 a>, 5a href="+coddatal_up" class="srefdatalpch
 agt;o              bthrk>);o      a>}ooo, 5a href="+cod">PTRACSINGLESTEPED" class="sref">PTRACSINGLESTEP215/a>o      case  -5a href="+cod">PTRACSINGLESTEPED" class="sref">PTRACSINGLESTEP215/: {vo, 5a href="+cod">PTRACSINGLEBLOCKct" class="sref">PTRACSINGLEBLOCK215/a>o      case  -5a href="+cod">PTRACSINGLEBLOCKct" class="sref">PTRACSINGLEBLOCK215/: {vo, 5a href="+cod">PTRACSYSEMUct" class="sref">PTRACSYSEMU215/a>o      case  -5a href="+cod">PTRACSYSEMUct" class="sref">PTRACSYSEMU215/: {v      case  -5a href="+cod">PTRACSYSEMUCSINGLESTEPED" class="sref">PTRACSYSEMUCSINGLESTEP215/: {vo      case  -5a href="+cod">PTRACSYSCALLCH" class="sref">PTRACSYSCALL215/: {v      case  -5a href="+cod">PTRACCONTCH" class="sref">PTRACCONT215/: {v                returt;5a href="+cod__ptracresumact" class="sref__ptracresumach
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+coddatact" class="srefdatach
 agt;oo      case  -5a href="+cod">PTRACKILLCH" class="sref">PTRACKILL215/: {v      a>        ift35a href="+codc chict" class="srefe chick
 a>->5a href="+cod__exit_stact" class="sref__exit_stact
 as t 5spa= class="comment"> althrey dhre */ch5/spa="v                        retur= 0;o                returt;5a href="+cod__ptracresumact" class="sref__ptracresumach
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codSIGKILLCH" class="srefSIGKILLch
 agt;o;o, 5a href="+codCONFIG_HAVE_ARCH__PTRAHOOKct" class="srefCONFIG_HAVE_ARCH__PTRAHOOK86
 );o      case  -5a href="+cod">PTRACGETREGSETED" class="sref">PTRACGETREGSET385/: {v      case  -5a href="+cod">PTRACSETREGSETED" class="sref">PTRACSETREGSET385/: {v      ) {v              s(struct35a href="+codiovecct" class="srefiovecct
 at35a href="+codkiovct" class="srefkiov385/gt;o              s(struct35a href="+codiovecct" class="srefiovecct
 at35a href="+cod__userch" class="sref">userct
 a> *5a href="+coduiovct" class="srefuiov385/ =rt35a href="+coddatav_up" class="srefdatav_ct
 >);oo                if t35a href="+codaccess_oaet" class="srefaccess_oach
 a>(5a href="+codVERIFY_WRITEet" class="srefVERIFY_WRITEgs
 ,>, 5a href="+coduiovct" class="srefuiov385/a>sizeof(> *5a href="+coduiovct" class="srefuiov385/aaaa>o              a>        retur= -5a href="+codeFAULTED" class="srefeFAULTgs
 gt;o;o                ift35a href="+cod_cget_userch" class="sref">get_userch
 a>(5a href="+codkiovct" class="srefkiov385/.t;5a href="+codiov_basect" class="srefiov_base385/a>>(&5a href="+coduiovct" class="srefuiov385/a>->5a href="+codiov_basect" class="srefiov_base385/a ||>;o                  t35a href="+cod_cget_userch" class="sref">get_userch
 a>(5a href="+codkiovct" class="srefkiov385/.t;5a href="+codiov_lrret" class="srefiov_lrrch
 , >(&5a href="+coduiovct" class="srefuiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 aaa>o              a>        retur= -5a href="+codeFAULTED" class="srefeFAULTgs
 gt;oo              t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracregsetup" class="sref__ptracregsetch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>>(&5a href="+codkiovct" class="srefkiov385/agt;o                if t35a href="+code=rED" class="srefretct
 aa>o      a>               ;5a href="+code rED" class="srefretct
  =rt35a href="+cod_c_ut_userch" class="sref_c_ut_userch
 a>(5a href="+codkiovct" class="srefkiov385/.t;5a href="+codiov_lrret" class="srefiov_lrrch
 , >(&5a href="+coduiovct" class="srefuiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 agt;o              bthrk>);o      a>}oo      default: {v              bthrk>);o      a>}oo        returt;5a href="+code rED" class="srefretct
 >);o}ootask_struct
 a> *5a href="+cod__ptracget_t>task_struct" class="sref__ptracget_t>task_struch
 a>(5a href="+codpid_uct" class="srefpid_uct
 at35a href="+codpidct" class="srefpidct
 aa>o      >(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 >);oo      t;5a href="+codecu_thre_unloED" class="srefrcu_thre_unloch
 aagt;o        5a href="+code chict" class="srefe chick
  =rt35a href="+codfind_t>tasby_vpidct" class="sreffind_t>tasby_vpidch
 a>(5a href="+codpidct" class="srefpidct
 agt;o        ift35a href="+codc chict" class="srefe chick
 aa>o              t35a href="+codget_t>task_struct" class="srefget_t>task_struch
 a>(5a href="+code chict" class="srefe chick
 agt;o      t;5a href="+codecu_thre_n_unloED" class="srefrcu_thre_n_unloch
 aagt;oo        if t35a href="+codc chict" class="srefe chick
 aa>o                returt;5a href="+codERR_PTRED" class="srefeRR_PTRch
 a= -5a href="+codeSRCHED" class="srefeSRCHct
 agt;o        returt;5a href="+codc chict" class="srefe chick
 >);o}oo, 5a href="+codarch___ptracattachch" class="srefarch___ptracattach125/a>o, 5a href="+codarch___ptracattachch" class="srefarch___ptracattach125/a>(5a href="+code chict" class="srefe chick
 a>      do { } w che (0aa>oo              unt_siuselong,>, 5a href="+coddatact" class="srefdatach
 aa>o      >(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 >);o      long   5a href="+codrerED" class="srefretct
 >);oo        ift35a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRAC>PTRAMEet" class="sref">PTRAC>PTRAMEck
 a>) {v              t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptrac_ptramact" class="sref__ptrac_ptramach
 aagt;o                if t35a href="+code=rED" class="srefretct
 aa>o              a>        5a href="+codarch___ptracattachch" class="srefarch___ptracattach125/a>(5a href="+codeurrmmect" class="srefeurrmme*/
 agt;o      a>      goto   5a href="+codouuct" class="srefoutct
 >);o      a>}o}o        5a href="+code chict" class="srefe chick
  =rt35a href="+cod__ptracget_t>task_struct" class="sref__ptracget_t>task_struch
 a>(5a href="+codpidct" class="srefpidct
 agt;o        ift35a href="+codIS_eRRct" class="srefIS_eRR125/a>(5a href="+code chict" class="srefe chick
 aa>) {v              t35a href="+code rED" class="srefretct
  =rt35a href="+cod">P_eRRct" class="sref">P_eRRch
 a>(5a href="+code chict" class="srefe chick
 agt;o              goto   5a href="+codouuct" class="srefoutct
 >);o      a>}oo        ift35a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACATTACHED" class="sref">PTRACATTACHgs
  ||>, 5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACSEIZEet" class="sref">PTRACSEIZEck
 a>) {v      a>      t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracattachch" class="sref__ptracattach125/a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>, 5a href="+coddatact" class="srefdatach
 a>);o                5spa= class="comment">*/5/spa="v      * Some architectures need to do book-keeping after*/5/spa="v      * a l/ptra attach.ch5/spa="v      */ch5/spa="v                if t35a href="+code=rED" class="srefretct
 aa>o                a>    , 5a href="+codarch___ptracattachch" class="srefarch___ptracattach125/a>(5a href="+code chict" class="srefe chick
 a>);o              goto   5a href="+codouuc_ut_t>task_struct" class="srefouuc_ut_t>task_struct
 >);o      a>}o      t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptraccheckcattachch" class="sref__ptraccheckcattach125/a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACKILLCH" class="sref">PTRACKILL215/ ||>;o                          a>    , 5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACINTERRUPTED" class="sref">PTRACINTERRUPT455/a>);o        ift35a href="+codrerED" class="srefretct
  < 0aa>o              goto   5a href="+codouuc_ut_t>task_struct" class="srefouuc_ut_t>task_struct
 >);oo      t;5a href="+code rED" class="srefretct
  =rt35a href="+codarch___ptrach" class="srefarch___ptra125/a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>, 5a href="+coddatact" class="srefdatach
 a>);o      t;5a href="+cod_ut_t>task_struct" class="sref_ut_t>task_struct
 a>(5a href="+code chict" class="srefe chick
 a>);o        returt;5a href="+code rED" class="srefretct
 >);o}o}otask_struct
 a> *5a href="+codtsoED" class="sreftsoct
 a>unt_siuselong>, 5a href="+codaddrch" class="srefaddrct
 a);o                          unt_siuselong>, 5a href="+coddatact" class="srefdatach
 aa>o      unt_siuselong   5a href="+codtmpct" class="sreftmpct
 >);o      inuct35a href="+codcopieict" class="srefcopieict
 >);oo      t;5a href="+codcopieict" class="srefcopieict
  =rt35a href="+codaccess_process_vmct" class="srefaccess_process_vmct
 a>(5a href="+codtsoED" class="sreftsoct
 a>, 5a href="+codaddrch" class="srefaddrct
 a>>(&5a href="+codtmpct" class="sreftmpct
 a>sizeof(p;5a href="+codtmpct" class="sreftmpct
 ), 0a>);o        ift35a href="+codcopieict" class="srefcopieict
  !=>sizeof(p;5a href="+codtmpct" class="sreftmpct
 )aa>o                retur= -5a href="+codeIOct" class="srefeIOct
 >);o        returt;5a href="+cod_ut_userch" class="sref_ut_userch
 a>(5a href="+codtmpct" class="sreftmpct
 a>(unt_siuselong   5a href="+cod__userch" class="sref">userct
 a>), 5a href="+coddatact" class="srefdatach
 a>);o}ootask_struct
 a> *5a href="+codtsoED" class="sreftsoct
 a>unt_siuselong>, 5a href="+codaddrch" class="srefaddrct
 a);o                a>        unt_siuselong>, 5a href="+coddatact" class="srefdatach
 aa>o      inuct35a href="+codcopieict" class="srefcopieict
 >);o      t35a href="+codcopieict" class="srefcopieict
  =rt35a href="+codaccess_process_vmct" class="srefaccess_process_vmct
 a>(5a href="+codtsoED" class="sreftsoct
 a>, 5a href="+codaddrch" class="srefaddrct
 a>>(&5a href="+coddatact" class="srefdatach
 a>sizeof(p;5a href="+coddatact" class="srefdatach
 a, 1a>);o        returft35a href="+codcopieict" class="srefcopieict
  ==>sizeof(p;5a href="+coddatact" class="srefdatach
 a) ? 0 :r= -5a href="+codeIOct" class="srefeIOct
 >);o}o;o, 5a href="+coddef"liict" class="srefdef"lii09
 a  5a href="+codCONFIG_COMPATED" class="srefCONFIG_COMPAT705/>;otask_struct
 a> *5a href="+code chict" class="srefe chick
 a>, 5a href="+codeompat_long_uct" class="srefeompat_long_u09
 a  5a href="+codrequeliED" class="srefrequeligs
 ,);o                        , 5a href="+codeompat_ulong_uct" class="srefeompat_ulong_u09
 a  5a href="+codaddrch" class="srefaddrct
 a>, 5a href="+codeompat_ulong_uct" class="srefeompat_ulong_u09
 a  5a href="+coddatact" class="srefdatach
 aa>o      t35a href="+codcompat_ulong_uct" class="srefeompat_ulong_u09
 a  5a href="+cod__userch" class="sref">userct
 a> *5a href="+coddata_up" class="srefdatapct
  =rt35a href="+codcompat___pED" class="srefcompat___pct
 a>(5a href="+coddatact" class="srefdatach
 a>);o      t35a href="+codcompat_ulong_uct" class="srefeompat_ulong_u09
 a  5a href="+codworict" class="srefworict
 >);o        5a href="+codt=sinfo_uct" class="sreft=sinfo_u09
 a  5a href="+codt=sinfoct" class="sreft=sinfo46
 >);o      inuct35a href="+code rED" class="srefretct
 >);oo      switchift35a href="+codrequeliED" class="srefrequeligs
 a>) {v      case  -5a href="+cod">PTRACPEEKTEXTED" class="sref">PTRACPEEKTEXTct
 : {v      case  -5a href="+cod">PTRACPEEKDATAED" class="sref">PTRACPEEKDATAct
 : {v              t35a href="+code rED" class="srefretct
  =rt35a href="+codaccess_process_vmct" class="srefaccess_process_vmct
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codaddrch" class="srefaddrct
 a>>(&5a href="+codworict" class="srefworict
 a>sizeof(p;5a href="+codworict" class="srefworict
 ), 0a>);o                ift35a href="+code rED" class="srefretct
  !=>sizeof(p;5a href="+codworict" class="srefworict
 )aa>o      a>               ;5a href="+code rED" class="srefretct
  =r= -5a href="+codeIOct" class="srefeIOct
 >);o              else);o              a>      t35a href="+code rED" class="srefretct
  =rt35a href="+cod_ut_userch" class="sref_ut_userch
 a>(5a href="+codworict" class="srefworict
 a> *5a href="+coddata_up" class="srefdatapct
 a>);o              bthrk>);oo      case  -5a href="+cod">PTRACPOKETEXTED" class="sref">PTRACPOKETEXTct
 : {v      case  -5a href="+cod">PTRACPOKEDATAED" class="sref">PTRACPOKEDATAct
 : {v              t35a href="+code rED" class="srefretct
  =rt35a href="+codaccess_process_vmct" class="srefaccess_process_vmct
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codaddrch" class="srefaddrct
 a>>(&5a href="+coddatact" class="srefdatach
 a>sizeof(p;5a href="+coddatact" class="srefdatach
 a, 1a>);o              t35a href="+code rED" class="srefretct
  =rft35a href="+code rED" class="srefretct
  !=>sizeof(p;5a href="+coddatact" class="srefdatach
 a ?r= -5a href="+codeIOct" class="srefeIOct
  : 0a>);o              bthrk>);oo      case  -5a href="+cod">PTRACGETEVENTMSGED" class="sref">PTRACGETEVENTMSGct
 : {v              t35a href="+code rED" class="srefretct
  =rt35a href="+cod_ut_userch" class="sref_ut_userch
 aft35a href="+codcompat_ulong_uct" class="srefeompat_ulong_u09
 )   5a href="+code chict" class="srefe chick
 a>->5a href="+cod__ptracmessagact" class="sref__ptracmessagact
 a> *5a href="+coddata_up" class="srefdatapct
 a>);o              bthrk>);oo      case  -5a href="+cod">PTRACGETSIGINFOct" class="sref">PTRACGETSIGINFOct
 : {v                5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracgett=sinfoct" class="sref__ptracgett=sinfoct
 a>(5a href="+code chict" class="srefe chick
 a>>(&5a href="+codt=sinfoct" class="sreft=sinfo46
 a>);o                if t35a href="+code=rED" class="srefretct
 aa>o                        5a href="+code rED" class="srefretct
  =rt35a href="+codcopy_t=sinfo_uo_userL132" class="srefcopy_t=sinfo_uo_userL1ct
 aa>o              a>              a>(struct35a href="+codeompat_t=sinfoct" class="srefeompat_t=sinfo09
 a  5a href="+cod__userch" class="sref">userct
 a>)   5a href="+coddata_up" class="srefdatapct
 ,);o      a>                      >(&5a href="+codt=sinfoct" class="sreft=sinfo46
 a>);o              bthrk>);o}o      case  -5a href="+cod">PTRACSETSIGINFOct" class="sref">PTRACSETSIGINFOct
 : {v               -5a href="+codmemsetup" class="srefmemsetct
 a>(&5a href="+codt=sinfoct" class="sreft=sinfo46
 , 0a>sizeofa  5a href="+codt=sinfoct" class="sreft=sinfo46
 a>);o                ift35a href="+codcopy_t=sinfo_from_userL132" class="srefcopy_t=sinfo_from_userL1ct
 aa>o                a>        >(&5a href="+codt=sinfoct" class="sreft=sinfo46
 , a>(struct35a href="+codeompat_t=sinfoct" class="srefeompat_t=sinfo09
 a  5a href="+cod__userch" class="sref">userct
 a>)   5a href="+coddata_up" class="srefdatapct
 )aa>o                       -5a href="+code rED" class="srefretct
  =r= -5a href="+codeFAULTED" class="srefeFAULTgs
 gt;o              else);o              a>        5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracsett=sinfoct" class="sref__ptracsett=sinfoct
 a>(5a href="+code chict" class="srefe chick
 a>>(&5a href="+codt=sinfoct" class="sreft=sinfo46
 a>);o      a>      bthrk>);o, 5a href="+codCONFIG_HAVE_ARCH__PTRAHOOKct" class="srefCONFIG_HAVE_ARCH__PTRAHOOK86
 );o      case  -5a href="+cod">PTRACGETREGSETED" class="sref">PTRACGETREGSET385/: {v      case  -5a href="+cod">PTRACSETREGSETED" class="sref">PTRACSETREGSET385/: {v      ) {v              s(struct35a href="+codiovecct" class="srefiovecct
 at35a href="+codkiovct" class="srefkiov385/gt;o              >(struct35a href="+codeompat_iovecct" class="srefeompat_iovec09
 a  5a href="+cod__userch" class="sref">userct
 a> *5a href="+coduiovct" class="srefuiov385/ =t;o                      a>(struct35a href="+codeompat_iovecct" class="srefeompat_iovec09
 a  5a href="+cod__userch" class="sref">userct
 a>)   5a href="+coddata_up" class="srefdatapct
 gt;o              t35a href="+codeompat_ul/p_uct" class="srefeompat_ul/p_u09
 a  5a href="+cod__pED" class="sref__pct
 gt;o              t35a href="+codeompat_t=ze_uct" class="srefeompat_t=ze_u09
 a  5a href="+codlrret" class="sreflrrch
 gt;oo                if t35a href="+codaccess_oaet" class="srefaccess_oach
 a>(5a href="+codVERIFY_WRITEet" class="srefVERIFY_WRITEgs
 ,>, 5a href="+coduiovct" class="srefuiov385/a>sizeof(> *5a href="+coduiovct" class="srefuiov385/aaaa>o              a>        retur= -5a href="+codeFAULTED" class="srefeFAULTgs
 gt;o;o                ift35a href="+cod_cget_userch" class="sref">get_userch
 a>(5a href="+cod__pED" class="sref__pct
 a>>(&5a href="+coduiovct" class="srefuiov385/a>->5a href="+codiov_basect" class="srefiov_base385/a ||>;o                  t35a href="+cod_cget_userch" class="sref">get_userch
 a>(5a href="+codlrret" class="sreflrrch
 , >(&5a href="+coduiovct" class="srefuiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 aaa>o                a>      retur= -5a href="+codeFAULTED" class="srefeFAULTgs
 gt;oo              t35a href="+codkiovct" class="srefkiov385/.t;5a href="+codiov_basect" class="srefiov_base385/ =rt35a href="+codcompat___pED" class="srefcompat___pct
 a>(5a href="+cod__pED" class="sref__pct
 a>);o              t35a href="+codkiovct" class="srefkiov385/.t;5a href="+codiov_lrret" class="srefiov_lrrch
  =rt35a href="+codlrret" class="sreflrrch
 gt;oo                5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracregsetup" class="sref__ptracregsetch
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>>(&5a href="+codkiovct" class="srefkiov385/agt;o                if t35a href="+code=rED" class="srefretct
 aa>o                        5a href="+code rED" class="srefretct
  =rt35a href="+cod_c_ut_userch" class="sref_c_ut_userch
 a>(5a href="+codkiovct" class="srefkiov385/.t;5a href="+codiov_lrret" class="srefiov_lrrch
 , >(&5a href="+coduiovct" class="srefuiov385/a>->5a href="+codiov_lrret" class="srefiov_lrrch
 agt;o              bthrk>);o      a>}ooo      default: {v              t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracrequeliED" class="sref__ptracrequelict
 a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>  5a href="+coddataup" class="srefdatach
 agt;o      a>}o}o        returt;5a href="+code rED" class="srefretct
 >);o10LLct
 a>}/pre>;o10L1215/a>o10L102
 , 5a href="+codasm="lkagact" class="srefasm="lkaga09
 along>, 5a href="+codeompat_tys___ptrach" class="srefeompat_tys___ptract
 a>(5a href="+codeompat_long_uct" class="srefeompat_long_u09
 a  5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codeompat_long_uct" class="srefeompat_long_u09
 a  5a href="+codpidct" class="srefpidct
 aa>o10L302
 a>                a>              t35a href="+codeompat_long_uct" class="srefeompat_long_u09
 a  5a href="+codaddrch" class="srefaddrct
 a>, 5a href="+codeompat_long_uct" class="srefeompat_long_u09
 a  5a href="+coddatact" class="srefdatach
 aa>o10L459
 ) {v10L502
 a>      >(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+code chict" class="srefe chick
 >);o10L655
 a>      long   5a href="+codrerED" class="srefretct
 >);o10L 475/a>o10L819
 a>        if  5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRAC>PTRAMEet" class="sref">PTRAC>PTRAMEck
 a>) {v10L109
 a>              t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptrac_ptramact" class="sref__ptrac_ptramach
 aagt;o10L109
 a>              goto   5a href="+codouuct" class="srefoutct
 >);o10L161
 a>      a>}o10L1125/a>o10L153
 a>        5a href="+code chict" class="srefe chick
  =rt35a href="+cod__ptracget_t>task_struct" class="sref__ptracget_t>task_struch
 a>(5a href="+codpidct" class="srefpidct
 agt;o10L419
 a>        if  5a href="+codIS_eRRct" class="srefIS_eRR125/a>(5a href="+code chict" class="srefe chick
 aa>) {v10L155
 a>              t35a href="+code rED" class="srefretct
  =rt35a href="+cod">P_eRRct" class="sref">P_eRRch
 a>(5a href="+code chict" class="srefe chick
 agt;o10L655
 a>              goto   5a href="+codouuct" class="srefoutct
 >);o10L746
 a>      a>}o10L 98
 >}o10L109
 a>        ift35a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACATTACHED" class="sref">PTRACATTACHgs
  ||>, 5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACSEIZEet" class="sref">PTRACSEIZEck
 a>) {v10L109
 a>              t35a href="+code rED" class="srefretct
  =rt35a href="+cod__ptracattachch" class="sref__ptracattach125/a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>, 5a href="+coddatact" class="srefdatach
 a>);o10L161
 a>                5spa= class="comment">*/5/spa="v10L102
 , 5spa= class="comment         a>      * Some architectures need to do book-keeping after*/5/spa="v10L302
 , 5spa= class="comment         a>      * a l/ptra attach.ch5/spa="v10L402
 , 5spa= class="comment         a>      */ch5/spa="v10L155
 a>                if t35a href="+code=rED" class="srefretct
 aa>o10L655
 a>              a>        5a href="+codarch___ptracattachch" class="srefarch___ptracattach125/a>(5a href="+code chict" class="srefe chick
 agt;o10L746
 a>      a>      goto   5a href="+codouuc_ut_t>task_struct" class="srefouuc_ut_t>task_struct
 >);o10L 98
 a>      a>}o10L109
 >}o10L153
 a>        5a href="+code rED" class="srefretct
  =rt35a href="+cod__ptraccheckcattachch" class="sref__ptraccheckcattach125/a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACKILLCH" class="sref">PTRACKILL215/ ||>}o10L161
 a>                                  5a href="+code queliED" class="srefrequeligs
  ==  -5a href="+cod">PTRACINTERRUPTED" class="sref">PTRACINTERRUPT455/a>);o10L102
 a>        if t35a href="+code=rED" class="srefretct
 aa>o10L302
 a>                5a href="+code rED" class="srefretct
  =rt35a href="+codeompat_arch___ptrach" class="srefeompat_arch___ptra125/a>(5a href="+code chict" class="srefe chick
 a>, 5a href="+codrequeliED" class="srefrequeligs
 ,>, 5a href="+codaddrch" class="srefaddrct
 a>, 5a href="+coddatact" class="srefdatach
 a>);o10L1245/a>o10L509
 a  5a href="+codouuc_ut_t>task_struct" class="srefouuc_ut_t>task_struct
 : {v10L655
 a>      t;5a href="+cod_ut_t>task_struct" class="sref_ut_t>task_struct
 a>(5a href="+code chict" class="srefe chick
 a>);o10L709
 a  5a href="+codouuct" class="srefoutct
 : {v10L 98
 a>        retur  5a href="+codrerED" class="srefretct
 >);o10L109
 a>}o10L109
 #endif    5spa= class="comment"> CONFIG_COMPAT */ch5/spa="v10L1215/a>o10L209
 #ifdef>, 5a href="+codCONFIG_HAVE_HW_BREAKPOINTED" class="srefCONFIG_HAVE_HW_BREAKPOINT215/a>o10L302
 inuct35a href="+cod__ptracget_bthrkpoinusct" class="sref__ptracget_bthrkpoinusct
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+codtsoED" class="sreftsoct
 aa>o10L459
 ) {v10L502
 a>        if, 5a href="+codatomic_inc_not_zeroct" class="srefatomic_inc_not_zeroct
 a>(&5a href="+codtsoED" class="sreftsoct
 a>->5a href="+cod__ptracbp_ hrcmect" class="sref__ptracbp_ hrcmeck
 aa {v10L655
 a>                retur0>);o10L 475/a>o10L 98
 a>        retur-1>);o10L109
 a>}o10L1475/a>o10L1215/voidct35a href="+cod__ptrac_ut_bthrkpoinusct" class="sref__ptrac_ut_bthrkpoinusct
 a>(struct35a href="+code=task_struct" class="sref">task_struct
 a> *5a href="+codtsoED" class="sreftsoct
 aa>o10L209
 ) {v10L302
 a>        if, 5a href="+codatomic_dec_and_teliED" class="srefatomic_dec_and_telict
 a>(&5a href="+codtsoED" class="sreftsoct
 a>->5a href="+cod__ptracbp_ hrcmect" class="sref__ptracbp_ hrcmeck
 aa {v10L459
 a>              t35a href="+codflush___ptrachw_bthrkpoinuct" class="srefflush___ptrachw_bthrkpoinuct
 a>(5a href="+codtsoED" class="sreftsoct
 a>);o10L509
 a>}o10L609
 #endif   5spa= class="comment"> CONFIG_HAVE_HW_BREAKPOINT */ch5/spa="v10L 475/}/pre>
The or=sinal LXR software by the -5a hrefhttp://sourceforge.net/projects/lxr">LXR ="counityct a>this experiommeal version by -5a hrefmailto:lxr@l"lux.no">lxr@l"lux.noct . lxr.l"lux.no kindly hosted by -5a hrefhttp://www.redpill-l"lpro.no">Redpill L"lpro ASct a>provider of L"lux ="nsulting and operations services since 1995.