On 06.11.2017 23:21, Christos Zoulas wrote: > In article <20171106141651.GA24822%britannica.bec.de@localhost>, > Joerg Sonnenberger <joerg%bec.de@localhost> wrote: >> On Mon, Nov 06, 2017 at 08:21:24AM -0500, Christos Zoulas wrote: >>> There is no try harder, which is what I am trying to explain. All 3 methods >>> are doing exactly the same thing. This is the problem we have; the only way >>> to get back from a vnode to a path is by using the reverse namei cache. >> >> The point is that no reversing of the namei cache *should* be done here. >> The full path should be computed as side effect of the original exec >> look up. > > We already do a getcwd to find the path in the non absolute case in exec. > The resulting path is not normalized, but it is absolute (good enough for > now). I propose to add p->p_path in struct proc, and cleanup the rest of > the places to use it: > > http://www.netbsd.org/~christos/p_path.diff > > I have not even compiled this, but I will do so and test if there are > no objections. This means that we always set AT_SUN_PATHNAME in the auxv > (for binaries that have Auxv) and we can always use sysctl to get the > pathname for the process). > > christos > Looks good! One question regarding fill_pathname(). RCS file: /cvsroot/src/sys/kern/kern_proc.c,v retrieving revision 1.207 diff -u -p -r1.207 kern_proc.c --- kern/kern_proc.c 28 Aug 2017 00:46:07 -0000 1.207 +++ kern/kern_proc.c 6 Nov 2017 22:09:31 -0000 @@ -2433,41 +2433,29 @@ proc_find_locked(struct lwp *l, struct p static int fill_pathname(struct lwp *l, pid_t pid, void *oldp, size_t *oldlenp) { -#ifndef _RUMPKERNEL int error; struct proc *p; - char *path; size_t len; if ((error = proc_find_locked(l, &p, pid)) != 0) return error; - if (p->p_textvp == NULL) { + if (p->p_path == NULL) { /// <- Can we change it to KASSERT()? if (pid != -1) mutex_exit(p->p_lock); return ENOENT; }
Attachment:
signature.asc
Description: OpenPGP digital signature