Re: Changes in fork ?

From: Nick Holloway (Nick.Holloway@alfie.demon.co.uk)
Date: Mon Jan 24 2000 - 18:07:43 EST


ksi@ksi-linux.com (Sergey Kubushin) writes:
> On 23 Jan 2000, Nick Holloway wrote:
> > Normally the implementations of setproctitle() are a little more careful
> > than that. They use the processes environment space in addition to the
> > argument space. This does rely on them being contiguous memory areas.
>
> Can one rely on argv and env being contigous memory area? Getting it another
> way - can the proposed patch be applied with no side effects? Sendmail's
> setproctitle does work the a.m. way, i.e. it uses the environment space in
> addition to the argument space so it looks like a right way to set a proc
> title...

I think the only thing that would break would be applications that
used "setproctitle", but then they would probably fail spectacularly.
I suspect that changing the process layout so the environment wasn't
immediately after the arguments would break applications for no gain,
so is unlikely to happen.

> What was the reason behind making such a change? It could be simply an
> overlooked typo, but it could also be done for some good reason. Can
> somebody enlighten me? It have to be fixed if it IS a typo. And it looks
> like a typo, 'coz we have to fix helluva lotta programs which do use
> setproctitle if it is not. Falling back to the old kernel behaviour would
> be much less pain then fixing all the applications that use to change their
> argv for ps...

I've looked into the source of 2.2 and 2.3 a little more, and the change
looks to be a side-effect of the clean-up done by Al Viro (author listed
in comment in fs/proc/base.c).

It appears to be down to a difference in the semantics of "get_array"
which is used in 2.2, and "access_process_vm" in 2.3.

It looks as if "access_process_vm" will return exactly the memory region
specified, but "get_array" would continue past the end of the memory
region specified looking for a null terminator.

So, although the 2.2 code used arg_end in "get_arg", this was only
the point to start looking for the end, rather than the actual end.
Thus "get_arg" would fetch the whole string used in "setproctitle"
by wandering into the environment area.

It means that my previous simple patch means that /proc/$$/cmdline will
contain all of the command line and environment, which isn't right.

-- 
 `O O'  | Nick.Holloway@alfie.demon.co.uk
// ^ \\ | http://www.alfie.demon.co.uk/

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Jan 31 2000 - 21:00:13 EST