Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 May 2007 23:37:46 -0000
From:      Pieter de Goeje <pieter@degoeje.nl>
To:        freebsd-current@freebsd.org
Cc:        Michiel Boland <michiel@boland.org>
Subject:   Re: openvpn dies in recent -CURRENT
Message-ID:  <200705200137.39544.pieter@degoeje.nl>
In-Reply-To: <Pine.GSO.4.64.0705192220330.4474@brakkenstein.nijmegen.internl.net>
References:  <Pine.GSO.4.64.0705192220330.4474@brakkenstein.nijmegen.internl.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday 19 May 2007, Michiel Boland wrote:
> Hi. Openvpn dies with an illegal instruction error in recent -CURRENTs. (I
> guess currents with the new gcc.)
>
> Running through a debugger gives:-
>
> Starting program: /usr/local/sbin/openvpn
> /usr/local/etc/openvpn/openvpn.conf
>
> Program received signal SIGILL, Illegal instruction.
> 0x0000000800868dd0 in PEM_read_bio_X509 (bp=0x800e4b080, x=0x0,
>      cb=0x439e70 <pem_password_callback>, u=0x0) from /lib/libcrypto.so.5
> (gdb) bt
> #0  0x0000000800868dd0 in PEM_read_bio_X509 (bp=0x800e4b080, x=0x0,
>      cb=0x439e70 <pem_password_callback>, u=0x0) from /lib/libcrypto.so.5
> #1  0x00000008006b14e8 in SSL_CTX_use_certificate_file (ctx=0x800e3d1c0,
>      file=0x800e1a0e8 "/usr/local/etc/openvpn/mboland.crt", type=Variable
> "type" is not available. )
>      at
> /usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/ssl_rsa.c:481 #2 
> 0x000000000043b0f8 in init_ssl ()
> #3  0x0000000000413a04 in init_instance ()
> #4  0x0000000000413ecd in init_instance_handle_signals ()
> #5  0x0000000000422b7f in main ()
> (gdb) disas
> Dump of assembler code for function PEM_read_bio_X509:
> 0x0000000800868dd0 <PEM_read_bio_X509+0>:       ud2a
> End of assembler dump.

Basically everything that depends on openssl is broken. This is because gcc 
4.2 disallows function pointer conversion.

Gcc emits several warnings of this type during the compilation of openssl:
"warning: function called through a non-compatible type
note: if this code is reached, the program will abort"
At these points gcc inserts an abort() call, instead of the intended call 
through a function pointer.

You can find more information here:
http://gcc.gnu.org/ml/gcc/2006-07/msg00037.html
http://www.mail-archive.com/openssl-dev%40openssl.org/msg21938.html

Apparently a fix for this is in openssl 0.9.9.

- Pieter de Goeje



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200705200137.39544.pieter>