Hi Olga,

> Venky, I added a patch as attachment which should work (its your patch
> with if(shp->shcomp) added).
> Could you test it with your scripts and make testshell, please?

The patch work fine with my scripts.  "make testshell" seems to fail
on my setup *with or without* this patch with this error:

--------

## Running sparcv9/ksh test: LANG='C'
script='sun_solaris_cr_6805794_character_to_wchar_not_working.sh',
mode='plain_script'
#       test
#       
../../../lib/libshell/common/tests/sun_solaris_cr_6805794_character_to_wchar_not_working.sh
#       begins
#       sun_solaris_cr_6805794_character_to_wchar_not_working.sh[96]: Local
#       overrride failed.
#       test
#       
../../../lib/libshell/common/tests/sun_solaris_cr_6805794_character_to_wchar_not_working.sh
#       failed with exit code 1 [ 2 tests 1 error ]
##--------> test failed

--------

Is this a known issue?  I'm running a slightly old build of Nevada
-- build 126.

Thanks,
Venky.

> 
> David, can you take a look at the patch and see if it makes sense, please?
> 
> Olga
> 
> 2010/3/28 ????? ???????????? <olga.kryzhanovska at gmail.com>:
> > Venky, are you sure the patch works?
> > I applied it to my work tree (which includes changes for
> > http://cr.opensolaris.org/~fleyta/ksh93_update2_bugfix1_20100326_03_webrev/)
> > and make testshell in usr/src/cmd/ksh/amd64 immediately crashed in the
> > alias.sh module:
> > ## Running amd64/ksh test: LANG='C' script='alias.sh', 
> > mode='compiled_script'
> > #       test shcomp-alias.ksh begins
> > #       ../../../lib/libshell/common/tests/shtests: line 130: 21908:
> > Memory fault(coredump)
> > #       test shcomp-alias.ksh failed to compile with exit code 267 [ 1
> > test 1 error ]
> > ##--------> test failed
> > *** Error code 1
> > The stack trace shows that shcomp blew up:
> > core 'core' of 21908:
> > /home/fleyta/ksh93/venky_setid/p030/proto/root_i386/usr/bin/shcomp
> >  fedce25a nv_disc  (80743fc, 80747a0, 1, fedcf6b9) + 18a
> >  fedcf6e9 nv_mount (80743fc, 0, 80746c0, fedae2e2) + 101
> >  fedae43f inittree (8062238, fee1d940, 8062238, fedadbaa) + 16b
> >  fedadbf8 nv_init  (8062238, fedaaee0, a, fedaca05) + 5c
> >  fedacc4f sh_init  (2, 8046db4, 0, 0) + 40f
> >  08051167 main     (2, 8046db4, 8046dc0, 8050fbf) + bb
> >  0805101d _start   (2, 8046fa4, 8046fee, 0, 804701a, 804706d) + 7d
> >
> > Can you go to usr/src/cmd/ksh/amd64 in your workspace, do a make
> > testshell and look if this crashes, please?
> >
> > Olga
> >
> > On Wed, Mar 24, 2010 at 2:20 PM, Venky <venkytv at opensolaris.org> wrote:
> >> Hi Olga,
> >>
> >>> > Venky, does this issue occur even if you bypass isaexec, i.e.
> >>
> >> Yes, tried this with /usr/bin/sparcv9/ksh93 to make sure isaexec
> >> does not complicate things.  It does seem to be because of the
> >> arguments getting mangled in line 1217 of libshell/common/sh/init.c.
> >>
> >> A quick hack to restore the mangled arguments before exec (patch
> >> attached) seems to fix this issue.  The $0 value remains messed up,
> >> though.  It displays /dev/fd/XX as the script name, while a #! line
> >> without arguments displays the correct script name.
> >>
> >> # cat >t1.ksh <<EOF
> >> #!/usr/bin/sparcv9/ksh93 -p
> >> echo \$0
> >> EOF
> >>
> >> # cat >t2.ksh <<EOF
> >> #!/usr/bin/sparcv9/ksh93
> >> echo \$0
> >> EOF
> >>
> >> # chmod +xs t[12].ksh
> >> # ls -l t*
> >> -rwsr-sr-x 1 root root 36 Mar 24 05:51 t1.ksh
> >> -rwsr-sr-x 1 root root 33 Mar 24 05:51 t2.ksh
> >> # exit
> >>
> >> $ ./t1.ksh
> >> /dev/fd/4
> >> $ ./t2.ksh
> >> t2.ksh
> >>
> >> Venky.
> >>
> >> On Wed, Mar 24, 2010 at 03:13:08AM +0100, ????? ???????????? wrote:
> >>> 2010/3/24 ?????????? ???????????????????????? <olga.kryzhanovska at 
> >>> gmail.com>:
> >>> > Venky, does this issue occur even if you bypass isaexec, i.e.
> >>> > #!/usr/bin/i86/ksh -p
> >>>
> >>> Correction:
> >>> #!/usr/bin/i86/ksh93 -p
> >>>
> >>> > or
> >>> > #!/usr/bin/sparcv0/ksh -p
> >>>
> >>> Correction:
> >>> #!/usr/bin/sparcv9/ksh93 -p
> >>>
> >>> >
> >>> > Olga
> >>> >
> >>> > On Fri, Mar 19, 2010 at 4:06 PM, Venky <venkytv at opensolaris.org> 
> >>> > wrote:
> >>> >> Have been investigating CR 6934836.
> >>> >>
> >>> >> 6934836 set-uid script with -p in magic number gets Exec format error
> >>> >> http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6934836
> >>> >>
> >>> >> Have a few questions I'm hoping the ksh93 folks here will be able
> >>> >> to help me with.
> >>> >>
> >>> >> It looks like the bug is due to the fact that set-uid scripts get
> >>> >> passed to the shell as a /dev/fd/XX parameter instead of the actual
> >>> >> path.  This has problems with ksh93 *only* if there are any options
> >>> >> passed on the command line.
> >>> >>
> >>> >> The test program below demonstrates this:
> >>> >>
> >>> >> ----------
> >>> >>
> >>> >> $ cat testexec.c
> >>> >> #include <stdio.h>
> >>> >> #include <fcntl.h>
> >>> >> #include <unistd.h>
> >>> >>
> >>> >> int
> >>> >> main()
> >>> >> {
> >>> >>        int fd = -1;
> >>> >>        char devfd[32];
> >>> >>        char *script = "/tmp/ok.ksh";  /* Can be any simple script */
> >>> >>
> >>> >>        fd = open(script, O_RDONLY);
> >>> >>        sprintf(devfd, "/dev/fd/%d", fd);
> >>> >>        execl("/usr/bin/sparcv9/ksh93", "ksh", "-v", devfd, NULL);
> >>> >> }
> >>> >> $ ./testexec
> >>> >> /usr/bin/ksh: /usr/bin/ksh: cannot execute [Exec format error]
> >>> >>
> >>> >> ----------
> >>> >>
> >>> >> The culprit seems to be the code below:
> >>> >>
> >>> >> <lib/libshell/common/sh/init.c>
> >>> >> http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libshell/common/sh/init.c#1216
> >>> >>
> >>> >> 1216   shp->st.dolv=argv+(argc-1)-shp->st.dolc;
> >>> >> 1217   shp->st.dolv[0] = argv[0];
> >>> >>
> >>> >> Here, we are overwriting one of the arguments of argv (because
> >>> >> shp->st.dolv indexes into the argv vector).
> >>> >>
> >>> >> In this particular case, argv which originally looked like this:
> >>> >>
> >>> >>    ksh, -v, /dev/fd/3
> >>> >>
> >>> >> ends up looking like this:
> >>> >>
> >>> >>    ksh, ksh, /dev/fd/3
> >>> >>
> >>> >> We then pass the mangled argv to execv():
> >>> >>
> >>> >> <lib/libshell/common/sh/main.c>
> >>> >> http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libshell/common/sh/main.c#298
> >>> >>
> >>> >> 298   /*  exec to change $0 for ps  */
> >>> >> 299   execv(pathshell(),av);
> >>> >>
> >>> >> As a consequence, ksh tries to load the ksh binary as a shell script 
> >>> >> and
> >>> >> fails with an "Exec format" error.
> >>> >>
> >>> >> Have been digging around trying to figure out what is the right
> >>> >> thing to do in this situation.  Figured some of the people more
> >>> >> familiar with the ksh93 source might be able to help.
> >>> >>
> >>> >> Also, the execv() call above uses pathshell() which seems plain wrong.
> >>> >> The whole exec hack here seems to be to make sure $0 is set correctly
> >>> >> for ps.  But pathshell() looks at the SHELL variable and might end up
> >>> >> executing the script with a different shell altogether.
> >>> >>
> >>> >> Any help appreciated.
> >>> >>
> >>> >> Thanks,
> >>> >> Venky.
> >>> >> _______________________________________________
> >>> >> ksh93-integration-discuss mailing list
> >>> >> ksh93-integration-discuss at opensolaris.org
> >>> >> http://mail.opensolaris.org/mailman/listinfo/ksh93-integration-discuss
> >>> >>
> >>> >
> >>> >
> >>> >
> >>> > --
> >>> >      ,   _                                    _   ,
> >>> >     { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> >>> > .----'-/`-/     olga.kryzhanovska at gmail.com   \-`\-'----.
> >>> >  `'-..-| /     Solaris/BSD//C/C++ programmer   \ |-..-'`
> >>> >      /\/\                                     /\/\
> >>> >      `--`                                      `--`
> >>> >
> >>>
> >>>
> >>>
> >>> --
> >>>       ,   _                                    _   ,
> >>>      { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> >>> .----'-/`-/     olga.kryzhanovska at gmail.com   \-`\-'----.
> >>>  `'-..-| /     Solaris/BSD//C/C++ programmer   \ |-..-'`
> >>>       /\/\                                     /\/\
> >>>       `--`                                      `--`
> >>
> >
> >
> >
> > --
> >      ,   _                                    _   ,
> >     { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> > .----'-/`-/     olga.kryzhanovska at gmail.com   \-`\-'----.
> >  `'-..-| /     Solaris/BSD//C/C++ programmer   \ |-..-'`
> >      /\/\                                     /\/\
> >      `--`                                      `--`
> >
> 
> 
> 
> -- 
>       ,   _                                    _   ,
>      { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> .----'-/`-/     olga.kryzhanovska at gmail.com   \-`\-'----.
>  `'-..-| /     Solaris/BSD//C/C++ programmer   \ |-..-'`
>       /\/\                                     /\/\
>       `--`                                      `--`

Reply via email to