[stunnel-users] connect error 0 running on ARM platform

FX35 fx35 at free.fr
Mon Jan 13 14:40:28 CET 2014


> Message: 3
> Date: Fri, 10 Jan 2014 15:27:10 +0100
> From: Michal Trojnara <Michal.Trojnara at mirt.net>
> To: stunnel-users at stunnel.org
> Subject: Re: [stunnel-users] connect error 0 running on ARM platform
> Message-ID: <52D0033E.1060109 at mirt.net>
> Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"
>
> On 01/09/2014 06:02 PM, FX35 wrote:
>>   Running stunnel 4.56 or 5.00 on an ARM platform (ARM926EJ) with Linux
>> 2.6.36.4, I encounter the following error : the call to connect()
>> return -1, but errno is set to 0 !
>>
>>   If stunnel is configured to use fork mode instead of pthread mode,
>> the problem disapear.
>>
>>   So it seems there is a problem, cross-compiling the program, with
>> errno or __errno_location() in the program generated with pthread.
>>
>>   I add the definition of _REENTRANT, without success ...
>>
>> (See $H1 at http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html)
>>
>>   Is somebody meet the same error ?
>
> The errno definition in the Android framework (as an example of
> Linux/ARM platform) is:
>
>      /* internal function returning the address of the thread-specific
>      errno */
>      extern volatile int*   __errno(void);
>
>      /* a macro expanding to the errno l-value */
>      #define  errno   (*__errno())
>
>
> It seems okay.
>
> How do you reproduce this problem?  What are the stunnel debug logs when
> it happens?
>
> Mike

  Hello Mike,

  It seems that the errno variable is not correcly set/updated in C 
library, using pthread mode.

  Sample:

    errno = -1;
    ret = connect(...);
    if( ret == -1 )
    {
       printf("errno=%d\n",errno);
    }

    will displays value -1 for errno, not EINPROGRESS or EWOULDBLOCK !

  errno is not updated ...

  So errno doen't reflect the real value.

  Map file of stunnel programm shows _errno_localion(), as you wrote.

  Perhaps is there a bug in uClib ?

  Here is the result of ldd command:

  # ldd stunnel
         libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x400f3000)
         libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x4013d000)
         libz.so.1 => /usr/lib/libz.so.1 (0x4027c000)
         libdl.so.0 => /lib/libdl.so.0 (0x4029b000)
         libutil.so.0 => /lib/libutil.so.0 (0x4009e000)
         libpthread.so.0 => /lib/libpthread.so.0 (0x400a7000)
         libc.so.0 => /lib/libc.so.0 (0x402a6000)
         libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x400c6000)
         ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x4008f000)

  Thanks for help.

  Regards,

            FWX.


More information about the stunnel-users mailing list