Deep down inside OpenSSL, err... LibreSSL, RSA_set_ex_data attempts to
authorreyk <reyk@openbsd.org>
Tue, 20 May 2014 14:21:45 +0000 (14:21 +0000)
committerreyk <reyk@openbsd.org>
Tue, 20 May 2014 14:21:45 +0000 (14:21 +0000)
commitaded3101de1fa7dd31f5c7e11c67f6f85a4f6211
treeed5618553681dd9fd8ad113971302336af0a0687
parent4a254543d5b0c3dbb473efeceb5b5fbf3eee160b
Deep down inside OpenSSL, err... LibreSSL, RSA_set_ex_data attempts to
free() the external data when releasing the RSA object.  The
RSA_GET_EX_NEW_INDEX(3) manual page doesn't mention that this is the
default behaviour - it just describes the possible free_func()
callback - and the code path in libcrypto is hiding the fact behind
layers of abstraction.

Fix possible double free by allocating and copying the external data
reference that is used for RSA privsep (pkiname in smtpd's case).

ok eric@ gilles@
usr.sbin/smtpd/ssl.c
usr.sbin/smtpd/ssl.h