Hi,
I just ported OpenSSL 1.1.0e to QNX and ran in to an issue on
shlibloadtest and it trying to unload the shared libraries in
conjunction with the code in crypto/init.c
1) crypto/init.c at line 106 deliberately leaks a reference to prevent
the library from unloading unless OPENSSL_USE_NODELETE is defined, yet
shlibloadtest doesn't test for whether this is set. I think the
shlibloadtest should only test the dlclose() return value on if
OPENSSL_USE_NODELETE is set.
2) crypto/init.c at line 77 does "atexit(OPENSSL_cleanup)". If I try
defining OPENSSL_USE_NODELETE then this atexit() handler is meant to
cleanup on unload of the shared library, but this meaning of atexit() is
Linux specific. It is not required in POSIX and the Linux manpage lists
this usage under the "Linux notes" section. In QNX there must be no
atexit() handlers registered if the library is being unloaded, otherwise
there is a forced abort() called from the dynamic linker. I think that
rather than using the atexit() mechanism some other mechanism e.g.
function attribute of destructor on gcc should be used.
Regards,
Nick.
--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev