Skip site navigation (1)Skip section navigation (2)
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>