Can child process use the ptrace system call to trace its parent?
Os is linux 2.6
Thanks.
upd1:
I want to trace process1 from “itself”. It is impossible, so I do fork and try to do ptrace(process1_pid, PTRACE_ATTACH) from child process. But I can’t, there is a strange error, like kernel prohibits child from tracing their parent processes
UPD2: such tracing can be prohibited by security policies. Which polices do this? Where is the checking code in the kernel?
UPD3: on my embedded linux I have no errors with PEEKDATA, but not with GETREGS:
child: getregs parent: -1
errno is 1, strerror is Operation not permitted
errno = EPERM
This question really interested me. So I wrote some code to try it out.
Firstly keep in mind, that when tracing a process, the tracing process becomes a parent for most purposes, except in name (i.e.
getppid()). Firstly, a snippet of thePTRACE_ATTACHsection of the manual is helpful:Now here is the code I wrote to test and verify that you can in fact
ptrace()your parent (you can build this by dumping it in a file namedblah.cand runningmake blah:Note that I’m exploiting the replication of the parent’s virtual address space to know where to look. Also note that when the child then terminates, I suspect there’s an implicit detach which must allow the parent to continue, I didn’t investigate further.