Hi,
I am sure I am doing something wrong, but when using a dummy crypto
device to recreate a customer issue I am getting a similar issue in
httpd-trunk but I am nearly sure someone would have complained here if
that would be the case.
Comments
Jean-Frederic
The stack:
+++
(gdb) bt
#0 0x00007fac11198a98 in raise () from /lib64/libc.so.6
#1 0x00007fac1119a69a in abort () from /lib64/libc.so.6
#2 0x00007fac01f27e33 in dummy_init (e=<optimized out>) at e_dummy.c:146
#3 0x00007fac05a69509 in test_rc4_init_key () from /lib64/libcrypto.so.10
#4 0x00007fac05b3374c in ?? () from /lib64/libcrypto.so.10
#5 0x00007fac00000001 in ?? ()
#6 0x0000000000e37138 in ?? ()
#7 0x0000000000e62348 in ?? ()
#8 0x00007fac11d9d68a in apr_pool_cleanup_register (p=0x7fac05a6a122
<dynamic_ctrl+210>, data=0xfe4678, plain_cleanup_fn=0x1,
child_cleanup_fn=0x7fac05dab5c0)
at memory/unix/apr_pools.c:2218
#9 0x0000000000f094c0 in ?? ()
#10 0x00007fac0625bf60 in ?? () from /home/jfclere/APACHE/modules/mod_ssl.so
#11 0x0000000000e60938 in ?? ()
#12 0x0000000000e62348 in ?? ()
#13 0x00007fac05a6ac58 in BUF_memdup () from /lib64/libcrypto.so.10
#14 0x00007fac06039af2 in ssl_init_Engine (s=0xe60938,
s@entry=0x7fffb9ad2e90, p=p@entry=0xe37138) at ssl_engine_init.c:386
#15 0x00007fac0603bdaf in ssl_init_Module (p=0xe37138, plog=<optimized
out>, ptemp=0xf09780, base_server=0x7fffb9ad2e90) at ssl_engine_init.c:242
#16 0x0000000000455153 in ap_run_post_config
(pconf=pconf@entry=0xe37138, plog=0xea0778, ptemp=0xe62348, s=0xe60938)
at config.c:103
#17 0x000000000042c575 in main (argc=3, argv=0x7fffb9ad3158) at main.c:788
+++
/* crypto/engine/e_chil.c -*- mode: C; c-file-style: "eay" -*- */
/* Written by Richard Levitte ([email protected]), Geoff Thorpe
* ([email protected]) and Dr Stephen N Henson ([email protected])
* for the OpenSSL project 2000.
*/
/* ====================================================================
* Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* [email protected].
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* ([email protected]). This product includes software written by Tim
* Hudson ([email protected]).
*
*/
#include <stdio.h>
#include <string.h>
#include <openssl/crypto.h>
#include <openssl/pem.h>
#include <openssl/dso.h>
#include <openssl/engine.h>
#include <openssl/ui.h>
#include <openssl/rand.h>
#ifndef OPENSSL_NO_RSA
#include <openssl/rsa.h>
#endif
#ifndef OPENSSL_NO_DH
#include <openssl/dh.h>
#endif
#include <openssl/bn.h>
static int dummy_init(ENGINE *e);
static int dummy_finish(ENGINE *e);
static RSA_METHOD dummy_rsa;
static DH_METHOD dummy_dh;
/* Constants used when creating the ENGINE */
static const char *engine_dummy_id = "dummy";
static const char *engine_dummy_name = "Dummy hardware engine support";
/* Now, to our own code */
/* This internal function is used by ENGINE_dummy() and possibly by the
* "dynamic" ENGINE support too */
static int bind_helper(ENGINE *e)
{
const DH_METHOD *dh;
const RSA_METHOD *rsa;
rsa = RSA_get_default_method();
memcpy(&dummy_rsa, rsa, sizeof dummy_rsa);
dummy_rsa.name = "Dummy engine RSA method";
dh = DH_OpenSSL();
memcpy(&dummy_dh, dh, sizeof dummy_dh);
dummy_dh.name = "Dummy engine DH method";
if (!ENGINE_set_id(e, engine_dummy_id) ||
!ENGINE_set_name(e, engine_dummy_name) ||
!ENGINE_set_DH(e, &dummy_dh) ||
!ENGINE_set_RSA(e, &dummy_rsa) ||
!ENGINE_set_init_function(e, dummy_init) ||
!ENGINE_set_finish_function(e, dummy_finish)) {
return 0;
}
return 1;
}
#ifdef OPENSSL_NO_DYNAMIC_ENGINE
static ENGINE *engine_dummy(void)
{
ENGINE *ret = ENGINE_new();
if(!ret)
return NULL;
if(!bind_helper(ret))
{
ENGINE_free(ret);
return NULL;
}
return ret;
}
void ENGINE_load_dummy(void)
{
/* Copied from eng_[openssl|dyn].c */
ENGINE *toadd = engine_dummy();
if(!toadd) return;
ENGINE_add(toadd);
ENGINE_free(toadd);
ERR_clear_error();
}
#endif
static int dummy_refcount;
/* (de)initialisation functions. */
static int dummy_init(ENGINE *e)
{
if (dummy_refcount++ != 0) {
abort();
}
fprintf(stderr, "dummy_init: Refcount now %d\n", dummy_refcount);
return 1;
}
static int dummy_finish(ENGINE *e)
{
dummy_refcount--;
fprintf(stderr, "dummy_finish: Refcount now %d\n", dummy_refcount);
return 1;
}
/* This stuff is needed if this ENGINE is being compiled into a self-contained
* shared-library. */
#ifndef OPENSSL_NO_DYNAMIC_ENGINE
static int bind_fn(ENGINE *e, const char *id)
{
if(id && (strcmp(id, engine_dummy_id) != 0))
return 0;
if(!bind_helper(e))
return 0;
return 1;
}
IMPLEMENT_DYNAMIC_CHECK_FN()
IMPLEMENT_DYNAMIC_BIND_FN(bind_fn)
#endif /* OPENSSL_NO_DYNAMIC_ENGINE */