Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Sep 2004 19:20:17 +0300
From:      Peter Pentchev <roam@ringlet.net>
To:        freebsd-hackers@FreeBSD.org
Cc:        Dag-Erling Smorgrav <des@FreeBSD.org>
Subject:   Re: [CFR] OpenSSL ENGINE fix
Message-ID:  <20040902162017.GI1469@straylight.m.ringlet.net>
In-Reply-To: <20040902160300.GH1469@straylight.m.ringlet.net>
References:  <20040902160300.GH1469@straylight.m.ringlet.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--8/UBlNHSEJa6utmr
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Sep 02, 2004 at 07:03:00PM +0300, Peter Pentchev wrote:
> Hi,
>=20
> The stunnel port had been badly broken on -CURRENT for some time, and
> today I seem to have tracked it down.  There is a problem in
> OpenSSL's ENGINE code, which seems to depend on realloc()'s initializing
> unused memory with zeroes.  Since this is certainly not true with
> malloc's 'J' option, the ENGINE code never actually runs out of RAND
> routines to look for, and dumps core on attempting to dereference a
> structure at 0xd0d0d0d0.
>=20
> The following simple patch seems to fix this particular problem, but I
> think there are others lurking close beneath the surface.  When I built
> stunnel with this patch, it did not immediately segfault on
> initialization, but it did later, when it attempted to get a couple of
> random bytes in order to actually establish an SSL connection.  A quick
> examination shows that the ENGINE code had "successfully" loaded and
> initialized all built-in engines and then tried to use the last one
> loaded - in this case, the 4758cca one - which promptly invoked a
> function pointed to by the static randomNumberGenerate variable, which,
> as you may have guessed by this point, held a NULL value.  Apparently,
> something else is rotten in ENGINE initialization land, and (at least)
> the 4758cca driver cannot properly detect that it has not properly
> detected its hardware :(

Oh, and of course, here's a program that demonstrates the null pointer
problem after the eng_table.c patch is applied:

#include <openssl/lhash.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/crypto.h> /* for CRYPTO_* and SSLeay_version */
#include <openssl/rand.h>
#if SSLEAY_VERSION_NUMBER >=3D 0x00907000L
#include <openssl/engine.h>
#else
#error weird openssl version
#endif

int main(void)
{
	unsigned char buf[256];
	int ret;
=09
	ENGINE_load_builtin_engines();
	ENGINE_register_all_complete();
	if (RAND_status()) {
		printf("RAND_status said ok\n");
	} else {
		printf("RAND_status kinda sorta failed\n");
	}
	ret =3D RAND_pseudo_bytes(buf, sizeof(buf) / 2);
	printf("RAND_pseudo_bytes() returned %d\n", ret);
	return (0);
}

G'luck,
Peter

--=20
Peter Pentchev	roam@ringlet.net    roam@cnsys.bg    roam@FreeBSD.org
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
If I had finished this sentence,

--8/UBlNHSEJa6utmr
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (FreeBSD)

iD8DBQFBN0hB7Ri2jRYZRVMRAgkyAJ95nBS6F1XOyk4GiH/uS1Y9qjXIvgCfR2QI
WItMs8RoSratewuphmcnhbw=
=Eggr
-----END PGP SIGNATURE-----

--8/UBlNHSEJa6utmr--



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