Date: Mon, 14 Apr 2003 16:12:06 -0400 (EDT) From: John Baldwin <jhb@FreeBSD.org> To: julian@FreeBSD.org Cc: current@FreeBSD.org Subject: Bug in rev 1.3 of sys/i386/linux/linux_ptrace.c Message-ID: <XFMail.20030414161206.jhb@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
In the linux_ptrace() function there is the following code: case PTRACE_GETFPXREGS: { #ifdef CPU_ENABLE_SSE struct proc *p; struct thread *td2; ... /* not being traced... */ if ((p->p_flag & P_TRACED) == 0) { error = EPERM; goto fail; } /* not being traced by YOU */ if (p->p_pptr != td->td_proc) { error = EBUSY; goto fail; } /* not currently stopped */ if ((p->p_flag & (P_TRACED|P_WAITED)) == 0) { error = EBUSY; goto fail; } ... Now, since we've already checked P_TRACED above, this last check will never fail. The diff in rev 1.3 was: - if (p->p_stat != SSTOP || (p->p_flag & P_WAITED) == 0) { + if ((p->p_flag & (P_TRACED|P_WAITED)) == 0) { So should this be (P_STOPPED|P_WAITED) instead? Or maybe just (P_STOPPED_TRACE|P_WAITED)? -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20030414161206.jhb>