Problem with ash redirection changing behaviour
Denys Vlasenko
vda.linux at googlemail.com
Wed Jun 2 15:51:52 UTC 2010
On Wed, Jun 2, 2010 at 11:56 AM, Richard Purdie <rpurdie at rpsys.net> wrote:
> Hi,
>
> I have an issue having recently upgraded busybox.
To which version do you upgrade?
> The change that is
> causing me problems is:
>
> http://git.busybox.net/busybox/commit/?id=6a0ad2506116f4ddc3f9f617a90ba04a57eeef88
>
> which is sanity checking file descriptors before allowing redirection.
>
> A script that triggers the problem is:
>
> """
> exec 9>&0 </etc/fstab
> while read fs mnt type opts dump pass junk
> do
> echo $fs
> done
> exec 0>&9 9>&-
> """
>
> The idea being to save stdin, read from a file and then restore stdin
> without forking. This used to work but now when run as ". script" from
> ash this results in:
>
> line 1: 0: Bad file descriptor
>
> which is in turn due to is_hidden_fd() returning 1 since stdin was being
> read as the source for commands.
>
> I can see what its getting at as stdin was where the main shell was
> accepting data from. bash doesn't error with this.
>
> Is this error the expected result or a bug in busybox?
This would be the bug, but I can't reproduce it. Test script:
echo Hi there >b.tmp
exec 9>&0 <b.tmp
while read a b
do
echo "$a $b"
done
exec 0>&9 9>&-
if test "$sourced"; then
echo Returning from sourced file
return
fi
sourced=1
echo Sourcing
. "$0"
echo Sourcing done
ls -l /proc/$$/fd
Running it:
# ./busybox ash b
Hi there
Sourcing
Hi there
Returning from sourced file
Sourcing done
total 0
lrwx------ 1 root root 64 2010-06-02 17:49 0 -> /dev/pts/0
lrwx------ 1 root root 64 2010-06-02 17:49 1 -> /dev/pts/0
lr-x------ 1 root root 64 2010-06-02 17:49 10 ->
/root/srcdevel/bbox/fix/busybox.t7/b
lrwx------ 1 root root 64 2010-06-02 17:49 2 -> /dev/pts/0
--
vda
More information about the busybox
mailing list