Re: [PATCH] ptrace on stopped processes (2.4)

From: OGAWA Hirofumi (hirofumi@mail.parknet.co.jp)
Date: Thu Jan 17 2002 - 14:23:24 EST


vic <zandy@cs.wisc.edu> writes:

> From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>:
> >> --- linux-2.4.16/kernel/ptrace.c Wed Nov 21 16:43:01 2001
> >> +++ linux-2.4.16.1/kernel/ptrace.c Fri Dec 21 10:42:44 2001
> >> @@ -89,8 +89,10 @@
> >> SET_LINKS(task);
> >> }
> >> write_unlock_irq(&tasklist_lock);
> >> -
> >> - send_sig(SIGSTOP, task, 1);
> >> + if (task->state != TASK_STOPPED)
> >> + send_sig(SIGSTOP, task, 1);
> >> + else
> >> + task->exit_code = SIGSTOP;
> >> return 0;
> >>
> >> bad:
> >
> > It seems that trace is started in the place different from
> > usual. Then, I think PTRACE_KILL doesn't work.
>
> I don't agree, it seems to work for me.

I tested the following on linux-2.4.16 + your_patch:

#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        pid_t pid;
        int ret, status;

        pid = fork();
        if (pid == -1)
                exit(1);
        if (pid == 0) {
                raise(SIGSTOP);
                while (1)
                        ;
                _exit(1);
        }

        ret = waitpid(pid, &status, WUNTRACED);
        if (ret == -1) {
                perror("waitpid (1)");
                exit(1);
        }

        ret = ptrace(PTRACE_ATTACH, pid, NULL, NULL);
        if (ret == -1) {
                perror("PTRACE_ATTACH");
                exit(1);
        }
        ret = waitpid(pid, &status, 0);
        if (ret == -1) {
                perror("waitpid (2)");
                exit(1);
        }
        ret = ptrace(PTRACE_KILL, pid, NULL, NULL);
        if (ret == -1) {
                perror("PTRACE_KILL");
                exit(1);
        }

        return 0;
}

Test result:

    hirofumi@devron (ptrace)[1111]$ ps ax|grep ptrace
      688 tty1 S 0:00 grep ptrace
    hirofumi@devron (ptrace)[1112]$ ls
    ptrace ptrace.c
    hirofumi@devron (ptrace)[1113]$ ./ptrace
    hirofumi@devron (ptrace)[1114]$ ps ax|grep ptrace
      691 tty1 R 0:04 ./ptrace
      693 tty1 S 0:00 grep ptrace
    hirofumi@devron (ptrace)[1115]$

Do I misunderstand something?

-- 
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Jan 23 2002 - 21:00:21 EST