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>
