[uClibc]RE: [BusyBox] Re: BusyBox `msh' doesn't work correctly with vfork / uClibc
Stefan Soucek
ssoucek at coactive.com
Tue Mar 5 18:17:39 UTC 2002
Thanks for looking through. This has been sleeping for a while and
I might put some work into it to synch up our msh version.
> I looked at that patch, and found that most of it had already been
> applied in the version of busybox/msh.c that I have (which is from
> uClinux-dist-20020220, and claims to be version 0.60.0). Those parts
> seems sane.
>
> However, Stefan's patch doesn't address the problem with `exit' that I
> reported, so my patch (that changes things to use `_exit') or
> something
> similar is still necessary.
I obviously missed those parts. I don't know why our shell doesn't crash
on them but maybe they never get activated.
> The parts of Stefan's patch which _aren't_ in the current sources are:
>
> (1) Some ifdefs to allow either fork or vfork to be used;
> the current
> sources just always use vfork, which seems fine to me.
The ifdefs are rather there to switch back to fork() if the vfork() patch
breaks msh.
> (2) A change to the `grave' function to avoid problems with vfork;
> since that function appears to do pretty complicated things
> within the child, Stefan's patch just does (where cp is the
> command):
>
> execlp("/bin/sh", "/bin/sh", "-c", cp, NULL);
>
> Not sure if that works, but the current code in `grave'
> is certain
> to screw things up when used with vfork.
The grave function is a big mystery to me. I have done some tracing to learn
which parts of it are vfork-safe but then I gave up. The hack using "execlp"
works in most cases but is *slow*. The drawback is that any variables in the
backticks aren't expanded; therefore this won't work,
DIR="/home"
RESULT=`ls -l $DIR`
> So, I'd recommend:
>
> Apply my earlier patch to use _exit
>
> Think about doing something with the `grave' function
> similar to what
> Stefan did.
-Stefan
--
Stefan Soucek, ssoucek at coactive.com
Coactive Networks, 28 Liberty Ship Way, Sausalito, CA 94965
Ph: (415) 289 7840, Fax: (415) 289 1320
More information about the uClibc
mailing list