"ps -e" without procfs(5)

Mikolaj Golub trociny at freebsd.org
Tue Nov 8 21:48:01 UTC 2011


On Sun, 6 Nov 2011 20:10:41 +0200 Kostik Belousov wrote:

 KB> On Sat, Nov 05, 2011 at 10:37:46PM +0200, Mikolaj Golub wrote:
 >> 
 >> http://people.freebsd.org/~trociny/env.sys.3.patch

 KB> Oops, I missed this in the previous review. You cannot use fubyte in
 KB> proc_read_mem(). fubyte reads a byte from the address space of the current
 KB> process. The fix is easy, use proc_rwmem for 1 byte.

 KB> I do not think that fall back to single byte read is warranted for
 KB> proc_read_mem calls e.g. for ps_strings. Add a flag to indicate whether
 KB> the proc_read_mem should fall back to byte read ?

 KB> I would prefer using sizeof(uint64_t) and sizeof(uint32_t) instead of 8
 KB> and 4 constants in the align checks.

 KB> Might be, add PROC_ASSERT_HELD() to get_ps_string() ?

 KB> procfs patch looks good.

Thanks. The updated version:

http://people.freebsd.org/~trociny/env.sys.4.patch

Investigating cases when EFAULT was returned and if the fallback was
successful I noticed that most of the cases were when p->p_comm changed during
the read, so the process was in exec in that time. In order to avoid this
error I added a check for P_INEXEC flag.

After this I observed EFAULT (very rarely) only when reading arg or env
strings and fallback was successful for those cases. So I modified the patch
to do fallback only when reading strings (as it was in one of my earlier
versions but with wrong fubyte), and returned your comment which explains why
it may happen :-)

Also in the procfs patch I have added the check for process state.

The userland part has not been changed since my first report:

http://people.freebsd.org/~trociny/env.user.patch

-- 
Mikolaj Golub


More information about the freebsd-hackers mailing list