Download raw body.
always use ps_ppid to get the parent pid, instead of ps_pptr->ps_pid
Use ps_ppid instead of ps_pptr->ps_pid in all places.
Not sure why not all cases where converted when ps_ppid was introduced.
--
:wq Claudio
diff --git kern/kern_exit.c kern/kern_exit.c
index 68830a47326..c1d5b8c0a16 100644
--- kern/kern_exit.c
+++ kern/kern_exit.c
@@ -746,7 +746,7 @@ proc_finish_wait(struct proc *waiter, struct process *pr)
* If we got the child via a ptrace 'attach',
* we need to give it back to the old parent.
*/
- if (pr->ps_oppid != 0 && (pr->ps_oppid != pr->ps_pptr->ps_pid) &&
+ if (pr->ps_oppid != 0 && (pr->ps_oppid != pr->ps_ppid) &&
(tr = prfind(pr->ps_oppid))) {
pr->ps_oppid = 0;
atomic_clearbits_int(&pr->ps_flags, PS_TRACED);
@@ -774,7 +774,7 @@ process_untrace(struct process *pr)
KASSERT(pr->ps_flags & PS_TRACED);
if (pr->ps_oppid != 0 &&
- (pr->ps_oppid != pr->ps_pptr->ps_pid))
+ (pr->ps_oppid != pr->ps_ppid))
ppr = prfind(pr->ps_oppid);
/* not being traced any more */
@@ -803,7 +803,7 @@ process_reparent(struct process *child, struct process *parent)
return;
KASSERT(child->ps_oppid == 0 ||
- child->ps_oppid == child->ps_pptr->ps_pid);
+ child->ps_oppid == child->ps_ppid);
LIST_REMOVE(child, ps_sibling);
LIST_INSERT_HEAD(&parent->ps_children, child, ps_sibling);
diff --git kern/kern_sysctl.c kern/kern_sysctl.c
index e015b530563..563c9f50632 100644
--- kern/kern_sysctl.c
+++ kern/kern_sysctl.c
@@ -1996,8 +1996,6 @@ fill_kproc(struct process *pr, struct kinfo_proc *ki, struct proc *p,
show_pointers);
/* stuff that's too painful to generalize into the macros */
- if (pr->ps_pptr)
- ki->p_ppid = pr->ps_ppid;
if (s->s_leader)
ki->p_sid = s->s_leader->ps_pid;
diff --git kern/sys_process.c kern/sys_process.c
index 3e2b4586f59..c58f72f72a5 100644
--- kern/sys_process.c
+++ kern/sys_process.c
@@ -291,7 +291,7 @@ ptrace_ctrl(struct proc *p, int req, pid_t pid, caddr_t addr, int data)
if (ISSET(tr->ps_flags, PS_TRACED))
return EBUSY;
atomic_setbits_int(&tr->ps_flags, PS_TRACED);
- tr->ps_oppid = tr->ps_pptr->ps_pid;
+ tr->ps_oppid = tr->ps_ppid;
if (tr->ps_ptstat == NULL)
tr->ps_ptstat = malloc(sizeof(*tr->ps_ptstat),
M_SUBPROC, M_WAITOK);
@@ -520,7 +520,7 @@ ptrace_ctrl(struct proc *p, int req, pid_t pid, caddr_t addr, int data)
* Stop the target.
*/
atomic_setbits_int(&tr->ps_flags, PS_TRACED);
- tr->ps_oppid = tr->ps_pptr->ps_pid;
+ tr->ps_oppid = tr->ps_ppid;
process_reparent(tr, p->p_p);
if (tr->ps_ptstat == NULL)
tr->ps_ptstat = malloc(sizeof(*tr->ps_ptstat),
diff --git kern/tty_tty.c kern/tty_tty.c
index d34aa0cee9f..e9027c17d16 100644
--- kern/tty_tty.c
+++ kern/tty_tty.c
@@ -117,7 +117,7 @@ cttyioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p)
return EINVAL;
sess = p->p_p->ps_pgrp->pg_session;
sess->s_verauthuid = p->p_ucred->cr_ruid;
- sess->s_verauthppid = p->p_p->ps_pptr->ps_pid;
+ sess->s_verauthppid = p->p_p->ps_ppid;
timeout_add_sec(&sess->s_verauthto, secs);
return 0;
case TIOCCLRVERAUTH:
@@ -135,7 +135,7 @@ cttyioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p)
*/
sess = p->p_p->ps_pgrp->pg_session;
if (sess->s_verauthuid == p->p_ucred->cr_ruid &&
- sess->s_verauthppid == p->p_p->ps_pptr->ps_pid)
+ sess->s_verauthppid == p->p_p->ps_ppid)
return 0;
return EPERM;
}
diff --git sys/sysctl.h sys/sysctl.h
index 37bdfbb0dcf..71e1b9af174 100644
--- sys/sysctl.h
+++ sys/sysctl.h
@@ -568,7 +568,7 @@ struct kinfo_vmentry {
* lim - source struct plimits
* sa - source struct sigacts
* There are some members that are not handled by these macros
- * because they're too painful to generalize: p_ppid, p_sid, p_tdev,
+ * because they're too painful to generalize: p_sid, p_tdev,
* p_tpgid, p_tsess, p_vm_rssize, p_u[us]time_{sec,usec}, p_cpuid
*/
@@ -645,6 +645,7 @@ do { \
(kp)->p_sigmask = (p)->p_sigmask; \
\
PR_LOCK(pr); \
+ (kp)->p_ppid = (pr)->ps_ppid; \
(kp)->p_sigignore = (sa) ? (sa)->ps_sigignore : 0; \
(kp)->p_sigcatch = (sa) ? (sa)->ps_sigcatch : 0; \
\
always use ps_ppid to get the parent pid, instead of ps_pptr->ps_pid