Call for testing: OpenSSH 6.8

Michael Felt aixtools at gmail.com
Sat Feb 28 22:55:48 AEDT 2015


As far as va_copy is concerned - I believe the default compiler should be
xlc rather than cc.

These are the default settings from the vac.cfg.53 file
* -qlanglvl=extc99 C compiler with common extensions, UNIX headers
xlc:    use        = DEFLT_C
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        libraries  = -L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-lc
        proflibs   = -L/lib/profiled,-L/usr/lib/profiled
        options    =
-qlanglvl=extc99,-qcpluscmt,-qkeyword=inline,-qalias=ansi

* ANSI C compiler, UNIX header files (V6 compatibility version)
xlc_v6: use        = DEFLT_C
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        libraries  = -L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-lc
        proflibs   = -L/lib/profiled,-L/usr/lib/profiled
        options    = -qalias=ansi

* C compiler, extended mode
cc:     use        = DEFLT_C
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        libraries  = -L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-lc
        proflibs   = -L/lib/profiled,-L/usr/lib/profiled
        options    = -qlanglvl=extended,-qnoro,-qnoroconst

* Strict ANSI compiler, ANSI headers
c89:    use        = DEFLT_C
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        libraries  = -L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-lc
        proflibs   = -L/lib/profiled,-L/usr/lib/profiled
        options    =
-D_ANSI_C_SOURCE,-qalias=ansi,-qnolonglong,-qstrict_induction

* Strict ANSI compiler, ANSI headers
c99:    use        = DEFLT_C
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        libraries  = -L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-lc
        proflibs   = -L/lib/profiled,-L/usr/lib/profiled
        options    =
-qlanglvl=stdc99,-D_ANSI_C_SOURCE,-D_ISOC99_SOURCE,-qalias=ansi,-qstrict_induction

If you look at my example above you will see that when -qlanglvl=extc99
va_copy gets 'transferred' to the _builtin_va_copy. I do not recall finding
va_copy in one of the libraries.

My question would be - are you still building against c89 standard (I
assume not). And as far as IBM C compatibility with gcc - xlc comes much
closer - with
* C++ compiler
xlc++:  use        = DEFLT_CPP
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        xlC        = /usr/vacpp/bin/xlC
        libraries2 =
-L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-L/usr/vacpp/lib,-lC,-lm,-lc
        proflibs   =
-L/usr/vacpp/lib/profiled,-L/lib/profiled,-L/usr/lib/profiled
        hdlibs     = -L/usr/vac/lib,-lhC,-lhmd
        options    = -qalias=ansi

* C++ compiler
xlC:    use        = DEFLT_CPP
        crt        = /lib/crt0.o
        mcrt       = /lib/mcrt0.o
        gcrt       = /lib/gcrt0.o
        xlC        = /usr/vacpp/bin/xlC
        libraries2 =
-L/usr/vac/lib,-lxlopt,-lxlipa,-lxl,-L/usr/vacpp/lib,-lC,-lm,-lc
        proflibs   =
-L/usr/vacpp/lib/profiled,-L/lib/profiled,-L/usr/lib/profiled
        hdlibs     = -L/usr/vac/lib,-lhC,-lhmd
        options    = -qalias=ansi
 being the 'natural' C++ co-compilers.

As a packager - I can resolve this myself by setting CC=xlc. So, please do
not see this as a bug or an error in the package - just as a FYI - where
you could provide a warning when plain "cc" is being used (e.g., I really
dislike the -qnoro option).

All in all - I am quite happy with how it is working - all tests seem to be
passing - and I shall be working on my next blog (google SecuringAIX should
find it - I dare not give the URL as being too pushy).

On Fri, Feb 27, 2015 at 7:12 PM, Darren Tucker <dtucker at zip.com.au> wrote:

> On Fri, Feb 27, 2015 at 7:12 AM, Michael Felt <aixtools at gmail.com> wrote:
>>
>> ld: 0711-317 ERROR: Undefined symbol: .va_copy
>> ld: 0711-317 ERROR: Undefined symbol: .EC_KEY_free
>>
>
> Which object files contain references to those symbols?  (running each
> through "nm" should show you).
>
>
>> ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more
>> information.
>>
>> The error above is a bit unusual.
>> 1) It has been seen before that with -qlanglvl=extc89 that va_copy is not
>> found. This is clear, I think, from the stdarg.h file:
>>
>>    +88  #ifdef _ISOC99_SOURCE
>>    +89  #define va_copy(__list1,__list2) ((void)(__list1 = __list2))
>>    +90  #endif
>>    +91
>>    +92  #endif /* _ANSI_C_SOURCE */
>>
>
> There's a definition of va_copy in defines.h which should be activated
> when the platform doesn't have it:
>
> #ifndef HAVE_VA_COPY
> # ifdef HAVE___VA_COPY
> #  define va_copy(dest, src) __va_copy(dest, src)
> # else
> #  define va_copy(dest, src) (dest) = (src)
> # endif
> #endif
>
> I suspect there's a file which should have includes.h at the top but
> doesn't.
>
> I think the EC_KEY_free should be fixed by this:
>
> diff --git a/kex.c b/kex.c
> index 2618e22..cf04574 100644
> --- a/kex.c
> +++ b/kex.c
> @@ -432,8 +432,10 @@ kex_free(struct kex *kex)
>  #ifdef WITH_OPENSSL
>         if (kex->dh)
>                 DH_free(kex->dh);
> +# ifdef OPENSSL_HAS_ECC
>         if (kex->ec_client_key)
>                 EC_KEY_free(kex->ec_client_key);
>
> I should be able to reproduce the problem by building against the exact
> openssl version you have.
>
> --
> Darren Tucker (dtucker at zip.com.au)
> GPG key 8FF4FA69 / D9A3 86E9 7EEE AF4B B2D4  37C9 C982 80C7 8FF4 FA69
>     Good judgement comes with experience. Unfortunately, the experience
> usually comes from bad judgement.
>


More information about the openssh-unix-dev mailing list