Erreur de segmentation dans SSL_CTX_new

J’essaie de me connecter en tant que client via SSL et observe un comportement étrange. Je reçois une erreur de segmentation intermittente dans SSL_CTX_new lorsque SSL_CTX_new tente de créer un nouveau contexte SSL . Il convient également de noter que ceci est un fCGI demon , et semble seulement avoir un problème lors de son exécution en tant que tel. Si je l’exécute en tant qu’application cgi autonome, le problème semble disparaître.

En regardant dans le fichier core, voici ce que je vois:

attelle (??, ??) à 0xd03c36f4
malloc_y (0x4c, 0x0, 0x9e, 0x0, 0x20062240, 0x170, 0x0, 0x0) à 0xd03c5bcc
malloc_common_81_64 (??) à 0xd03512b8
mem.default_malloc_ex () à 0xd0b0f784
CRYPTO_malloc_24_10 () à 0xd0b101c8
ssl_cert.ssl_cert_new () à 0xd6f86084
ssl_lib.SSL_CTX_new () à 0xd6f83084

Quelqu’un at-il rencontré quelque chose de similaire? Une recherche des questions précédentes a SSL_CTX_new des discussions sur SSL_CTX_new renvoyant NULL , mais aucun rapport sur les erreurs de segmentation.

Voici la fonction que j’utilise pour créer le nouveau contexte:

 SSL_CTX* newSSLContext(char* keyfile, char* password) { SSL_METHOD *meth; SSL_CTX *ctx; if (!bio_err) { SSL_library_init(); SSL_load_error_ssortingngs(); bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); } signal(SIGPIPE, sigpipe_handle); meth = SSLv23_method(); ctx = SSL_CTX_new(meth); if (!(SSL_CTX_use_certificatee_chain_file(ctx, keyfile))) { err("Can't read certificatee file"); return NULL; } pass = password; SSL_CTX_set_default_passwd_cb(ctx, password_cb); if (!(SSL_CTX_use_PrivateKey_file(ctx, keyfile, SSL_FILETYPE_PEM))) { err("Can't read key file"); return NULL; } if (!(SSL_CTX_load_verify_locations(ctx, keyfile, 0))) { err("Can't read CA list"); return NULL; } return ctx; } 

Est-ce que vous initialisez la variable bio_err à NULL? Si vous n’appelez pas SSL_library_init avant SSL_CTX_new , vous serez en erreur.

À défaut d’une bonne solution. Je me suis tourné vers libcurl pour mes besoins SSL. Cela semble rationaliser le code que je dois écrire.