Changes in fork ?
Nick Holloway
Nick.Holloway en alfie.demon.co.uk
Mar Ene 25 03:48:28 CST 2000
ksi en 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 en 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 en vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/
Más información sobre la lista de distribución Ayuda