From 6ef6925f124cd599fed86ba7fde6d568df542acf Mon Sep 17 00:00:00 2001 From: Nicolas Thill Date: Fri, 15 May 2009 15:21:35 +0000 Subject: [PATCH] openssl: revert update to 0.9.8k in r15745 SVN-Revision: 15872 --- package/openssl/Makefile | 23 +- .../patches/001-upstream_dtls_cisco.patch | 139 ----- .../openssl/patches/100-parallel-build.patch | 24 - package/openssl/patches/120-makedepend.patch | 9 +- package/openssl/patches/121-ocf-config.patch | 24 - .../openssl/patches/140-makefile-dirs.patch | 18 +- .../patches/160-disable_doc_tests.patch | 36 +- .../169-makefile-ccache_needs_quotes.patch | 40 -- .../patches/180-fix_link_segfault.patch | 18 - .../{200-ocf-20080917.patch => 200-ocf.patch} | 521 ++++++------------ .../patches/205-use_local_cryptodev_h.patch | 494 +++++++++++++++++ .../openssl/patches/400-cve_2008_5077.patch | 151 +++++ .../openssl/patches/401_cve_2009_0590.patch | 75 +++ 13 files changed, 943 insertions(+), 629 deletions(-) delete mode 100644 package/openssl/patches/001-upstream_dtls_cisco.patch delete mode 100644 package/openssl/patches/100-parallel-build.patch delete mode 100644 package/openssl/patches/121-ocf-config.patch delete mode 100644 package/openssl/patches/169-makefile-ccache_needs_quotes.patch delete mode 100644 package/openssl/patches/180-fix_link_segfault.patch rename package/openssl/patches/{200-ocf-20080917.patch => 200-ocf.patch} (77%) create mode 100644 package/openssl/patches/205-use_local_cryptodev_h.patch create mode 100644 package/openssl/patches/400-cve_2008_5077.patch create mode 100644 package/openssl/patches/401_cve_2009_0590.patch diff --git a/package/openssl/Makefile b/package/openssl/Makefile index 11a9ef2e28..ff968c4594 100644 --- a/package/openssl/Makefile +++ b/package/openssl/Makefile @@ -1,24 +1,23 @@ -# +# # Copyright (C) 2006-2009 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # +# $Id$ include $(TOPDIR)/rules.mk PKG_NAME:=openssl -PKG_VERSION:=0.9.8k -PKG_RELEASE:=2 +PKG_VERSION:=0.9.8i +PKG_RELEASE:=3.1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.openssl.org/source/ \ ftp://ftp.funet.fi/pub/crypt/cryptography/libs/openssl/source/ \ ftp://ftp.webmonster.de/pub/openssl/source/ \ ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/ -PKG_MD5SUM:=e555c6d58d276aec7fdc53363e338ab3 - -PKG_BUILD_DEPENDS:=ocf-crypto-headers +PKG_MD5SUM:=561e00f18821c74b2b86c8c7786f9d8b include $(INCLUDE_DIR)/package.mk @@ -28,9 +27,9 @@ define Package/openssl/Default endef define Package/openssl/Default/description - The OpenSSL Project is a collaborative effort to develop a robust, - commercial-grade, full-featured, and Open Source toolkit implementing the - Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) + The OpenSSL Project is a collaborative effort to develop a robust, + commercial-grade, full-featured, and Open Source toolkit implementing the + Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. endef @@ -44,7 +43,7 @@ endef define Package/libopenssl/description $(call Package/openssl/Default/description) - This package contains the OpenSSL shared libraries, needed by other + This package contains the OpenSSL shared libraries, needed by other programs. endef @@ -69,10 +68,10 @@ endef OPENSSL_NO_CIPHERS:= no-idea no-md2 no-mdc2 no-rc5 no-sha0 no-smime \ no-rmd160 no-aes192 no-ripemd no-camellia no-ans1 no-krb5 ifeq ($(BOARD),ixp4xx) -OPENSSL_OPTIONS:= shared no-ec no-err no-hw no-threads zlib-dynamic \ +OPENSSL_OPTIONS:= shared no-ec no-err no-fips no-hw no-threads zlib-dynamic \ no-sse2 no-perlasm --with-cryptodev else -OPENSSL_OPTIONS:= shared no-ec no-err no-hw no-threads zlib-dynamic \ +OPENSSL_OPTIONS:= shared no-ec no-err no-fips no-hw no-threads zlib-dynamic \ no-engines no-sse2 no-perlasm endif diff --git a/package/openssl/patches/001-upstream_dtls_cisco.patch b/package/openssl/patches/001-upstream_dtls_cisco.patch deleted file mode 100644 index 46f4bb2233..0000000000 --- a/package/openssl/patches/001-upstream_dtls_cisco.patch +++ /dev/null @@ -1,139 +0,0 @@ ---- a/ssl/d1_clnt.c -+++ b/ssl/d1_clnt.c -@@ -130,7 +130,7 @@ static int dtls1_get_hello_verify(SSL *s - - static SSL_METHOD *dtls1_get_client_method(int ver) - { -- if (ver == DTLS1_VERSION) -+ if (ver == DTLS1_VERSION || ver == DTLS1_BAD_VER) - return(DTLSv1_client_method()); - else - return(NULL); -@@ -181,7 +181,8 @@ int dtls1_connect(SSL *s) - s->server=0; - if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1); - -- if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00)) -+ if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00) && -+ (s->version & 0xff00 ) != (DTLS1_BAD_VER & 0xff00)) - { - SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR); - ret = -1; ---- a/ssl/d1_lib.c -+++ b/ssl/d1_lib.c -@@ -187,7 +187,10 @@ void dtls1_free(SSL *s) - void dtls1_clear(SSL *s) - { - ssl3_clear(s); -- s->version=DTLS1_VERSION; -+ if (s->options & SSL_OP_CISCO_ANYCONNECT) -+ s->version=DTLS1_BAD_VER; -+ else -+ s->version=DTLS1_VERSION; - } - - /* ---- a/ssl/d1_pkt.c -+++ b/ssl/d1_pkt.c -@@ -987,15 +987,17 @@ start: - if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) - { - struct ccs_header_st ccs_hdr; -+ int ccs_hdr_len = DTLS1_CCS_HEADER_LENGTH; - - dtls1_get_ccs_header(rr->data, &ccs_hdr); - - /* 'Change Cipher Spec' is just a single byte, so we know - * exactly what the record payload has to look like */ - /* XDTLS: check that epoch is consistent */ -- if ( (s->client_version == DTLS1_BAD_VER && rr->length != 3) || -- (s->client_version != DTLS1_BAD_VER && rr->length != DTLS1_CCS_HEADER_LENGTH) || -- (rr->off != 0) || (rr->data[0] != SSL3_MT_CCS)) -+ if (s->client_version == DTLS1_BAD_VER || s->version == DTLS1_BAD_VER) -+ ccs_hdr_len = 3; -+ -+ if ((rr->length != ccs_hdr_len) || (rr->off != 0) || (rr->data[0] != SSL3_MT_CCS)) - { - i=SSL_AD_ILLEGAL_PARAMETER; - SSLerr(SSL_F_DTLS1_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC); -@@ -1311,7 +1313,7 @@ int do_dtls1_write(SSL *s, int type, con - #if 0 - /* 'create_empty_fragment' is true only when this function calls itself */ - if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done -- && SSL_version(s) != DTLS1_VERSION) -+ && SSL_version(s) != DTLS1_VERSION && SSL_version(s) != DTLS1_BAD_VER) - { - /* countermeasure against known-IV weakness in CBC ciphersuites - * (see http://www.openssl.org/~bodo/tls-cbc.txt) ---- a/ssl/s3_clnt.c -+++ b/ssl/s3_clnt.c -@@ -708,7 +708,7 @@ int ssl3_get_server_hello(SSL *s) - - if (!ok) return((int)n); - -- if ( SSL_version(s) == DTLS1_VERSION) -+ if ( SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) - { - if ( s->s3->tmp.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST) - { ---- a/ssl/ssl.h -+++ b/ssl/ssl.h -@@ -510,6 +510,8 @@ typedef struct ssl_session_st - #define SSL_OP_COOKIE_EXCHANGE 0x00002000L - /* Don't use RFC4507 ticket extension */ - #define SSL_OP_NO_TICKET 0x00004000L -+/* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ -+#define SSL_OP_CISCO_ANYCONNECT 0x00008000L - - /* As server, disallow session resumption on renegotiation */ - #define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -995,7 +995,8 @@ long SSL_ctrl(SSL *s,int cmd,long larg,v - s->max_cert_list=larg; - return(l); - case SSL_CTRL_SET_MTU: -- if (SSL_version(s) == DTLS1_VERSION) -+ if (SSL_version(s) == DTLS1_VERSION || -+ SSL_version(s) == DTLS1_BAD_VER) - { - s->d1->mtu = larg; - return larg; ---- a/ssl/ssl_sess.c -+++ b/ssl/ssl_sess.c -@@ -211,6 +211,11 @@ int ssl_get_new_session(SSL *s, int sess - ss->ssl_version=TLS1_VERSION; - ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; - } -+ else if (s->version == DTLS1_BAD_VER) -+ { -+ ss->ssl_version=DTLS1_BAD_VER; -+ ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; -+ } - else if (s->version == DTLS1_VERSION) - { - ss->ssl_version=DTLS1_VERSION; ---- a/ssl/t1_enc.c -+++ b/ssl/t1_enc.c -@@ -765,10 +765,10 @@ int tls1_mac(SSL *ssl, unsigned char *md - HMAC_CTX_init(&hmac); - HMAC_Init_ex(&hmac,mac_sec,EVP_MD_size(hash),hash,NULL); - -- if (ssl->version == DTLS1_VERSION && ssl->client_version != DTLS1_BAD_VER) -+ if (ssl->version == DTLS1_BAD_VER || -+ (ssl->version == DTLS1_VERSION && ssl->client_version != DTLS1_BAD_VER)) - { - unsigned char dtlsseq[8],*p=dtlsseq; -- - s2n(send?ssl->d1->w_epoch:ssl->d1->r_epoch, p); - memcpy (p,&seq[2],6); - -@@ -793,7 +793,7 @@ printf("rec="); - {unsigned int z; for (z=0; zlength; z++) printf("%02X ",buf[z]); printf("\n"); } - #endif - -- if ( SSL_version(ssl) != DTLS1_VERSION) -+ if ( SSL_version(ssl) != DTLS1_VERSION && SSL_version(ssl) != DTLS1_BAD_VER) - { - for (i=7; i>=0; i--) - { diff --git a/package/openssl/patches/100-parallel-build.patch b/package/openssl/patches/100-parallel-build.patch deleted file mode 100644 index eace0f491b..0000000000 --- a/package/openssl/patches/100-parallel-build.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -uNr openssl-0.9.8j.ORIG/Makefile.org openssl-0.9.8j/Makefile.org ---- openssl-0.9.8j.ORIG/Makefile.org 2009-01-07 18:06:31.000000000 +0000 -+++ openssl-0.9.8j/Makefile.org 2009-01-07 18:08:38.000000000 +0000 -@@ -333,15 +333,15 @@ - dir=crypto; target=all; $(BUILD_ONE_CMD) - build_fips: - @dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD) --build_ssl: -+build_ssl: build_crypto - @dir=ssl; target=all; $(BUILD_ONE_CMD) --build_engines: -+build_engines: build_crypto - @dir=engines; target=all; $(BUILD_ONE_CMD) --build_apps: -+build_apps: build_libs - @dir=apps; target=all; $(BUILD_ONE_CMD) --build_tests: -+build_tests: build_libs - @dir=test; target=all; $(BUILD_ONE_CMD) --build_tools: -+build_tools: build_libs - @dir=tools; target=all; $(BUILD_ONE_CMD) - - all_testapps: build_libs build_testapps diff --git a/package/openssl/patches/120-makedepend.patch b/package/openssl/patches/120-makedepend.patch index 01af569fea..232ffb761a 100644 --- a/package/openssl/patches/120-makedepend.patch +++ b/package/openssl/patches/120-makedepend.patch @@ -1,6 +1,7 @@ -diff -burN openssl-0.9.8k/util/domd openssl-0.9.8k.patched/util/domd ---- openssl-0.9.8k/util/domd 2009-01-21 22:44:52.000000000 +0100 -+++ openssl-0.9.8k.patched/util/domd 2009-03-26 15:46:28.600347986 +0100 +Index: openssl-0.9.8e/util/domd +=================================================================== +--- openssl-0.9.8e.orig/util/domd 2007-06-04 13:23:32.130849264 +0200 ++++ openssl-0.9.8e/util/domd 2007-06-04 13:23:32.408807008 +0200 @@ -14,7 +14,8 @@ cp Makefile Makefile.save # fake the presence of Kerberos @@ -15,7 +16,7 @@ diff -burN openssl-0.9.8k/util/domd openssl-0.9.8k.patched/util/domd done sed -e '/^# DO NOT DELETE.*/,$d' < Makefile > Makefile.tmp echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' >> Makefile.tmp -- ${CC:-gcc} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp +- gcc -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp + ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp ${PERL} $TOP/util/clean-depend.pl < Makefile.tmp > Makefile.new rm -f Makefile.tmp diff --git a/package/openssl/patches/121-ocf-config.patch b/package/openssl/patches/121-ocf-config.patch deleted file mode 100644 index 1656be872c..0000000000 --- a/package/openssl/patches/121-ocf-config.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -burN openssl-0.9.8k/config openssl-0.9.8k.patched/config ---- openssl-0.9.8k/config 2009-02-16 09:43:41.000000000 +0100 -+++ openssl-0.9.8k.patched/config 2009-03-27 19:38:37.262255825 +0100 -@@ -399,8 +399,11 @@ - # this is where the translation occurs into SSLeay terms - # --------------------------------------------------------------------------- - -+# figure out if gcc is available and if so we use it otherwise -+# we fallback to whatever cc does on the system - GCCVER=`(gcc -dumpversion) 2>/dev/null` - if [ "$GCCVER" != "" ]; then -+ CC=gcc - # then strip off whatever prefix egcs prepends the number with... - # Hopefully, this will work for any future prefixes as well. - GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'` -@@ -409,6 +412,8 @@ - # major and minor version numbers. - # peak single digit before and after first dot, e.g. 2.95.1 gives 29 - GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'` -+else -+ CC=cc - fi - - # Only set CC if not supplied already diff --git a/package/openssl/patches/140-makefile-dirs.patch b/package/openssl/patches/140-makefile-dirs.patch index d0eaec9128..b35c8de0e0 100644 --- a/package/openssl/patches/140-makefile-dirs.patch +++ b/package/openssl/patches/140-makefile-dirs.patch @@ -1,11 +1,13 @@ ---- openssl-0.9.8j/Makefile.org 2008-12-30 14:26:26.000000000 +0100 -+++ openssl-0.9.8j.patched/Makefile.org 2009-01-17 13:41:52.610868317 +0100 -@@ -131,7 +131,7 @@ +Index: openssl-0.9.8e/Makefile.org +=================================================================== +--- openssl-0.9.8e.orig/Makefile.org 2007-06-04 13:23:32.048861728 +0200 ++++ openssl-0.9.8e/Makefile.org 2007-06-04 13:23:32.857738760 +0200 +@@ -104,7 +104,7 @@ + ZLIB_INCLUDE= + LIBZLIB= - BASEADDR= - --DIRS= crypto fips ssl engines apps test tools -+DIRS= crypto fips ssl apps - SHLIBDIRS= crypto ssl fips +-DIRS= crypto ssl engines apps test tools ++DIRS= crypto ssl apps + SHLIBDIRS= crypto ssl # dirs in crypto to build diff --git a/package/openssl/patches/160-disable_doc_tests.patch b/package/openssl/patches/160-disable_doc_tests.patch index e64a9193b3..9706a0b2a8 100644 --- a/package/openssl/patches/160-disable_doc_tests.patch +++ b/package/openssl/patches/160-disable_doc_tests.patch @@ -1,25 +1,26 @@ -diff -burN openssl-0.9.8k/Makefile openssl-0.9.8k.patched/Makefile ---- openssl-0.9.8k/Makefile 2009-03-25 14:11:43.000000000 +0100 -+++ openssl-0.9.8k.patched/Makefile 2009-03-26 15:28:35.483566078 +0100 -@@ -133,7 +133,7 @@ - - BASEADDR=0xFB00000 +Index: openssl-0.9.8e/Makefile +=================================================================== +--- openssl-0.9.8e.orig/Makefile 2007-06-04 13:23:31.995869784 +0200 ++++ openssl-0.9.8e/Makefile 2007-06-04 13:23:33.246679632 +0200 +@@ -106,7 +106,7 @@ + ZLIB_INCLUDE= + LIBZLIB= -DIRS= crypto ssl engines apps test tools +DIRS= crypto ssl engines apps tools SHLIBDIRS= crypto ssl # dirs in crypto to build -@@ -150,7 +150,7 @@ +@@ -123,7 +123,7 @@ # tests to perform. "alltests" is a special word indicating that all tests # should be performed. -TESTS = alltests -+TESTS = ++TESTS = MAKEFILE= Makefile -@@ -162,7 +162,7 @@ +@@ -135,7 +135,7 @@ TOP= . ONEDIRS=out tmp @@ -28,16 +29,16 @@ diff -burN openssl-0.9.8k/Makefile openssl-0.9.8k.patched/Makefile WDIRS= windows LIBS= libcrypto.a libssl.a SHARED_CRYPTO=libcrypto$(SHLIB_EXT) -@@ -321,7 +321,7 @@ - ../crypto/uid.o +@@ -225,7 +225,7 @@ + @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV) sub_all: build_all -build_all: build_libs build_apps build_tests build_tools +build_all: build_libs build_apps build_tools - build_libs: build_crypto build_fips build_ssl build_shared build_engines + build_libs: build_crypto build_ssl build_engines -@@ -613,7 +613,7 @@ +@@ -475,7 +475,7 @@ dist_pem_h: (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean) @@ -46,10 +47,11 @@ diff -burN openssl-0.9.8k/Makefile openssl-0.9.8k.patched/Makefile install_sw: @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \ -diff -burN openssl-0.9.8k/Makefile.org openssl-0.9.8k.patched/Makefile.org ---- openssl-0.9.8k/Makefile.org 2009-03-03 23:40:29.000000000 +0100 -+++ openssl-0.9.8k.patched/Makefile.org 2009-03-26 15:29:05.243750064 +0100 -@@ -611,7 +611,7 @@ +Index: openssl-0.9.8e/Makefile.org +=================================================================== +--- openssl-0.9.8e.orig/Makefile.org 2007-06-04 13:23:32.857738760 +0200 ++++ openssl-0.9.8e/Makefile.org 2007-06-04 13:23:33.246679632 +0200 +@@ -473,7 +473,7 @@ dist_pem_h: (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean) diff --git a/package/openssl/patches/169-makefile-ccache_needs_quotes.patch b/package/openssl/patches/169-makefile-ccache_needs_quotes.patch deleted file mode 100644 index 70a0eec3cd..0000000000 --- a/package/openssl/patches/169-makefile-ccache_needs_quotes.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- openssl-0.9.8k/Makefile.org 2009-04-06 13:52:21.000000000 +0200 -+++ openssl-0.9.8k.patched/Makefile.org 2009-04-06 13:54:04.000000000 +0200 -@@ -357,7 +357,7 @@ - $(AR) libcrypto.a fips/fipscanister.o ; \ - else \ - if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \ -- FIPSLD_CC=$(CC); CC=fips/fipsld; \ -+ FIPSLD_CC="$(CC)"; CC=fips/fipsld; \ - export CC FIPSLD_CC; \ - fi; \ - $(MAKE) -e SHLIBDIRS='crypto' build-shared; \ -@@ -380,7 +380,7 @@ - fips/fipscanister.o: build_fips - libfips$(SHLIB_EXT): fips/fipscanister.o - @if [ "$(SHLIB_TARGET)" != "" ]; then \ -- FIPSLD_CC=$(CC); CC=fips/fipsld; export CC FIPSLD_CC; \ -+ FIPSLD_CC="$(CC)"; CC=fips/fipsld; export CC FIPSLD_CC; \ - $(MAKE) -f Makefile.shared -e $(BUILDENV) \ - CC=$${CC} LIBNAME=fips THIS=$@ \ - LIBEXTRAS=fips/fipscanister.o \ ---- openssl-0.9.8k/apps/Makefile 2009-04-06 22:07:06.000000000 +0200 -+++ openssl-0.9.8k.patched/apps/Makefile 2009-04-06 22:12:39.000000000 +0200 -@@ -153,7 +153,7 @@ - shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \ - shlib_target="$(SHLIB_TARGET)"; \ - elif [ -n "$(FIPSCANLIB)" ]; then \ -- FIPSLD_CC=$(CC); CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \ -+ FIPSLD_CC="$(CC)"; CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \ - fi; \ - LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \ - [ "x$(FIPSCANLIB)" = "xlibfips" ] && LIBRARIES="$$LIBRARIES -lfips"; \ -@@ -158,7 +158,7 @@ - LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \ - [ "x$(FIPSCANLIB)" = "xlibfips" ] && LIBRARIES="$$LIBRARIES -lfips"; \ - $(MAKE) -f $(TOP)/Makefile.shared -e \ -- CC=$${CC} APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \ -+ CC="$${CC}" APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \ - LIBDEPS="$(PEX_LIBS) $$LIBRARIES $(EX_LIBS)" \ - link_app.$${shlib_target} - -(cd ..; \ diff --git a/package/openssl/patches/180-fix_link_segfault.patch b/package/openssl/patches/180-fix_link_segfault.patch deleted file mode 100644 index 66d37cbe80..0000000000 --- a/package/openssl/patches/180-fix_link_segfault.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/Makefile.shared -+++ b/Makefile.shared -@@ -93,7 +93,6 @@ LINK_APP= \ - LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \ - LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \ - LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ -- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ - $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} ) - - LINK_SO= \ -@@ -103,7 +102,6 @@ LINK_SO= \ - SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \ - LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \ - LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ -- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ - $${SHAREDCMD} $${SHAREDFLAGS} \ - -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \ - $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \ diff --git a/package/openssl/patches/200-ocf-20080917.patch b/package/openssl/patches/200-ocf.patch similarity index 77% rename from package/openssl/patches/200-ocf-20080917.patch rename to package/openssl/patches/200-ocf.patch index bf72d8abb2..b80f342979 100644 --- a/package/openssl/patches/200-ocf-20080917.patch +++ b/package/openssl/patches/200-ocf.patch @@ -1,6 +1,7 @@ ---- a/Configure -+++ b/Configure -@@ -34,6 +34,8 @@ my $usage="Usage: Configure [no- +diff -Naur openssl-0.9.8i.orig/Configure openssl-0.9.8i/Configure +--- openssl-0.9.8i.orig/Configure 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/Configure 2008-10-01 04:16:12.000000000 +0200 +@@ -34,6 +34,8 @@ # (Default: KRB5_DIR/include) # --with-krb5-flavor Declare what flavor of Kerberos 5 is used. Currently # supported values are "MIT" and "Heimdal". A value is required. @@ -9,7 +10,7 @@ # # --test-sanity Make a number of sanity checks on the data in this file. # This is a debugging tool for OpenSSL developers. -@@ -540,6 +542,9 @@ my %table=( +@@ -540,6 +542,9 @@ ##### Compaq Non-Stop Kernel (Tandem) "tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::", @@ -19,7 +20,7 @@ ); my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A -@@ -589,6 +594,8 @@ my $montasm=1; # but "no-montasm" is d +@@ -589,6 +594,8 @@ my $no_asm=0; my $no_dso=0; my $no_gmp=0; @@ -28,7 +29,7 @@ my @skip=(); my $Makefile="Makefile"; my $des_locl="crypto/des/des_locl.h"; -@@ -716,6 +723,14 @@ PROCESS_ARGS: +@@ -716,6 +723,14 @@ { exit(&test_sanity()); } @@ -43,7 +44,7 @@ elsif (/^reconfigure/ || /^reconf/) { if (open(IN,"<$Makefile")) -@@ -924,6 +939,7 @@ foreach (sort (keys %disabled)) +@@ -924,6 +939,7 @@ print " OPENSSL_NO_$ALGO"; if (/^err$/) { $flags .= "-DOPENSSL_NO_ERR "; } @@ -51,7 +52,7 @@ elsif (/^asm$/) { $no_asm = 1; } } else -@@ -1064,6 +1080,16 @@ if (!$no_krb5) +@@ -1064,6 +1080,16 @@ $withargs{"krb5-dir"} ne ""; } @@ -68,8 +69,9 @@ # The DSO code currently always implements all functions so that no # applications will have to worry about that from a compilation point # of view. However, the "method"s may return zero unless that platform ---- a/INSTALL -+++ b/INSTALL +diff -Naur openssl-0.9.8i.orig/INSTALL openssl-0.9.8i/INSTALL +--- openssl-0.9.8i.orig/INSTALL 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/INSTALL 2008-10-01 04:16:12.000000000 +0200 @@ -103,6 +103,12 @@ define preprocessor symbols, specify additional libraries, library directories or other compiler options. @@ -83,9 +85,10 @@ Installation in Detail ---------------------- ---- a/Makefile.org -+++ b/Makefile.org -@@ -367,7 +367,7 @@ files: +diff -Naur openssl-0.9.8i.orig/Makefile.org openssl-0.9.8i/Makefile.org +--- openssl-0.9.8i.orig/Makefile.org 2008-10-01 04:16:02.000000000 +0200 ++++ openssl-0.9.8i/Makefile.org 2008-10-01 04:16:12.000000000 +0200 +@@ -367,7 +367,7 @@ links: @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl @@ -94,8 +97,9 @@ @set -e; target=links; $(RECURSIVE_BUILD_CMD) gentests: ---- a/Makefile.shared -+++ b/Makefile.shared +diff -Naur openssl-0.9.8i.orig/Makefile.shared openssl-0.9.8i/Makefile.shared +--- openssl-0.9.8i.orig/Makefile.shared 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/Makefile.shared 2008-10-01 04:16:12.000000000 +0200 @@ -6,13 +6,13 @@ # properly @@ -114,206 +118,9 @@ # LIBNAME contains just the name of the library, without prefix ("lib" # on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so, ---- a/config -+++ b/config -@@ -48,10 +48,10 @@ done - - # First get uname entries that we use below - --MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown" --RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown" --SYSTEM=`(uname -s) 2>/dev/null` || SYSTEM="unknown" --VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown" -+[ "$MACHINE" ] || MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown" -+[ "$RELEASE" ] || RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown" -+[ "$SYSTEM" ] || SYSTEM=`(uname -s) 2>/dev/null` || SYSTEM="unknown" -+[ "$VERSION" ] || VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown" - - - # Now test for ISC and SCO, since it is has a braindamaged uname. -@@ -270,7 +270,7 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${ - echo "ppc-apple-darwin${VERSION}" - ;; - *) -- echo "i386-apple-darwin${VERSION}" -+ echo "${MACHINE}-apple-darwin${VERSION}" - ;; - esac - exit 0 -@@ -401,9 +401,9 @@ exit 0 - - # figure out if gcc is available and if so we use it otherwise - # we fallback to whatever cc does on the system --GCCVER=`(gcc -dumpversion) 2>/dev/null` -+CC="${CC:-gcc}" -+GCCVER=`(${CC} -dumpversion) 2>/dev/null` - if [ "$GCCVER" != "" ]; then -- CC=gcc - # then strip off whatever prefix egcs prepends the number with... - # Hopefully, this will work for any future prefixes as well. - GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'` -@@ -413,7 +413,7 @@ if [ "$GCCVER" != "" ]; then - # peak single digit before and after first dot, e.g. 2.95.1 gives 29 - GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'` - else -- CC=cc -+ CC="${CC:-cc}" - fi - GCCVER=${GCCVER:-0} - if [ "$SYSTEM" = "HP-UX" ];then -@@ -482,6 +482,9 @@ echo Operating system: $GUESSOS - # script above so we end up with values in vars but that would take - # more time that I want to waste at the moment - case "$GUESSOS" in -+ uClinux*) -+ OUT=uClinux-dist -+ ;; - mips2-sgi-irix) - CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'` - CPU=${CPU:-0} ---- /dev/null -+++ b/makefile-uclinuxdist -@@ -0,0 +1,138 @@ -+# -+# this makefile gets recursed through by various bits of the build -+# so we need to only setup some things when invoked from outside -+# this directory. -+# -+# davidm@snapgear.com -+# -+ -+IN_LIBSSL := true -+export IN_LIBSSL -+ -+CONFIG_OPTS := --prefix=// --install_prefix=$(shell pwd)/build/install -+ -+ifdef CONFIG_USER_FLATFSD_FLATFSD -+CONFIG_OPTS += --openssldir=/etc/config -+else -+CONFIG_OPTS += --openssldir=/etc -+endif -+ifdef DISABLE_SHARED_SSL -+CONFIG_OPTS += no-shared -+else -+CONFIG_OPTS += shared -+endif -+ -+CONFIG_OPTS += no-rc2 -+CONFIG_OPTS += no-krb5 -+CONFIG_OPTS += no-rc5 -+CONFIG_OPTS += no-md2 -+CONFIG_OPTS += no-idea -+#CONFIG_OPTS += no-pem -+#CONFIG_OPTS += no-md5 -+#CONFIG_OPTS += no-sha -+#CONFIG_OPTS += no-hmac -+#CONFIG_OPTS += no-des -+#CONFIG_OPTS += no-aes -+#CONFIG_OPTS += no-bn -+CONFIG_OPTS += no-ec -+#CONFIG_OPTS += no-rsa -+#CONFIG_OPTS += no-dsa -+CONFIG_OPTS += no-ecdsa -+#CONFIG_OPTS += no-dh -+CONFIG_OPTS += no-ecdh -+CONFIG_OPTS += no-dso -+#CONFIG_OPTS += no-engine -+#CONFIG_OPTS += no-buffer -+#CONFIG_OPTS += no-bio -+#CONFIG_OPTS += no-stack -+#CONFIG_OPTS += no-lhash -+#CONFIG_OPTS += no-rand -+CONFIG_OPTS += no-err -+#CONFIG_OPTS += no-evp -+#CONFIG_OPTS += no-asn1 -+#CONFIG_OPTS += no-x509 -+#CONFIG_OPTS += no-x509v3 -+#CONFIG_OPTS += no-txt_db -+#CONFIG_OPTS += no-pkcs7 -+#CONFIG_OPTS += no-pkcs12 -+#CONFIG_OPTS += no-comp -+#CONFIG_OPTS += no-ocsp -+#CONFIG_OPTS += no-ui -+#CONFIG_OPTS += no-store -+CONFIG_OPTS += no-pqueue -+ -+# REVISIT: It would be better to have OPENSSL config options -+# which turn on this support as needed -+ifeq ($(CONFIG_USER_NESSUS_NASL)$(CONFIG_USER_SSH_SSH),) -+CONFIG_OPTS += no-ripemd -+CONFIG_OPTS += no-cast -+CONFIG_OPTS += no-rc4 -+endif -+ -+ifeq ($(CONFIG_USER_NESSUS_NASL)$(CONFIG_USER_SSH_SSH)$(CONFIG_PROP_SSCEP_SSCEP),) -+CONFIG_OPTS += no-bf -+endif -+ -+ifeq ($(CONFIG_USER_OPENVPN_OPENVPN)$(CONFIG_USER_WGET),) -+CONFIG_OPTS += no-md4 -+endif -+ -+ifdef CONFIG_OCF_OCF -+CONFIG_OPTS += --with-cryptodev -+#CONFIG_OPTS += --with-cryptodev-digests -+endif -+ -+# -+# if you want engines (they are dl loaded), a few things -+# need to be setup, you will also need to mod everything -+# to link against -ldl if it uses libcrypto. By default we -+# disable it (cryptodev suport is still included). -+# -+ifdef YOU_WANT_DYNAMIC_HW_ENGINES_ENABLED -+LIBSSL_dlfcn = dlfcn -+else -+CONFIG_OPTS += no-hw -+LIBSSL_dlfcn = -+endif -+ -+# -+# our libs aren't in the default location yet -+# -+LDFLAGS += -L$(ROOTDIR)/lib/libssl/build -+export LDFLAGS -+ -+all: build/configured -+ $(MAKE) -C build -+ $(MAKE) -C build install_sw -+ -+build/configured: makefile config Configure -+ rm -rf build -+ find . -type d > .dirs -+ find . ! -type d | grep -v ./makefile > .files -+ while read t; do mkdir -p build/$$t; done < .dirs -+ while read t; do ln -s `pwd`/$$t build/$$t; done < .files -+ rm -f .dirs .files -+ chmod +x build/config -+ cd build; MACHINE=uClinux-dist ./config $(CONFIG_OPTS) -+ $(MAKE) -C build depend -+ $(MAKE) -C build links -+ touch build/configured -+ -+clean: -+ -rm -rf build -+ -+romfs: -+ cd build/install/lib; \ -+ for i in *.so*; do \ -+ if [ -L $$i ]; then \ -+ $(ROMFSINST) -s `find $$i -printf %l` /lib/$$i; \ -+ elif [ -f $$i ]; then \ -+ $(ROMFSINST) /lib/$$i; \ -+ fi; \ -+ done -+ -+romfs_user: -+ $(ROMFSINST) -e CONFIG_USER_OPENSSL_APPS build/install/bin/openssl /bin/openssl -+ # $(ROMFSINST) -e CONFIG_USER_OPENSSL_APPS build/install/bin/c_rehash /bin/c_rehash -+ -+ ---- a/apps/apps.h -+++ b/apps/apps.h +diff -Naur openssl-0.9.8i.orig/apps/apps.h openssl-0.9.8i/apps/apps.h +--- openssl-0.9.8i.orig/apps/apps.h 2008-10-01 04:16:02.000000000 +0200 ++++ openssl-0.9.8i/apps/apps.h 2008-10-01 04:16:12.000000000 +0200 @@ -112,7 +112,7 @@ #ifndef HEADER_APPS_H #define HEADER_APPS_H @@ -323,9 +130,10 @@ #include #include ---- a/apps/progs.h -+++ b/apps/progs.h -@@ -129,7 +129,9 @@ FUNCTION functions[] = { +diff -Naur openssl-0.9.8i.orig/apps/progs.h openssl-0.9.8i/apps/progs.h +--- openssl-0.9.8i.orig/apps/progs.h 2008-10-01 04:16:02.000000000 +0200 ++++ openssl-0.9.8i/apps/progs.h 2008-10-01 04:16:12.000000000 +0200 +@@ -129,7 +129,9 @@ #ifndef OPENSSL_NO_ENGINE {FUNC_TYPE_GENERAL,"engine",engine_main}, #endif @@ -335,9 +143,10 @@ {FUNC_TYPE_GENERAL,"prime",prime_main}, #ifndef OPENSSL_NO_MD2 {FUNC_TYPE_MD,"md2",dgst_main}, ---- a/apps/speed.c -+++ b/apps/speed.c -@@ -292,7 +292,7 @@ static const char *names[ALGOR_NUM]={ +diff -Naur openssl-0.9.8i.orig/apps/speed.c openssl-0.9.8i/apps/speed.c +--- openssl-0.9.8i.orig/apps/speed.c 2008-10-01 04:16:02.000000000 +0200 ++++ openssl-0.9.8i/apps/speed.c 2008-10-01 04:16:12.000000000 +0200 +@@ -292,7 +292,7 @@ "evp","sha256","sha512", "aes-128 ige","aes-192 ige","aes-256 ige"}; static double results[ALGOR_NUM][SIZE_NUM]; @@ -346,7 +155,7 @@ static double rsa_results[RSA_NUM][2]; static double dsa_results[DSA_NUM][2]; #ifndef OPENSSL_NO_ECDSA -@@ -328,6 +328,79 @@ static SIGRETTYPE sig_done(int sig) +@@ -328,6 +328,79 @@ #define START 0 #define STOP 1 @@ -426,7 +235,7 @@ #if defined(OPENSSL_SYS_NETWARE) /* for NetWare the best we can do is use clock() which returns the -@@ -358,6 +431,11 @@ static double Time_F(int s) +@@ -358,6 +431,11 @@ { double ret; @@ -438,7 +247,7 @@ #ifdef USE_TOD if(usertime) { -@@ -832,6 +910,14 @@ int MAIN(int argc, char **argv) +@@ -832,6 +910,14 @@ j--; /* Otherwise, -elapsed gets confused with an algorithm. */ } @@ -453,7 +262,7 @@ else if ((argc > 0) && (strcmp(*argv,"-evp") == 0)) { argc--; -@@ -1260,6 +1346,9 @@ int MAIN(int argc, char **argv) +@@ -1260,6 +1346,9 @@ #ifdef HAVE_FORK BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n"); #endif @@ -463,7 +272,7 @@ goto end; } argc--; -@@ -1267,11 +1356,6 @@ int MAIN(int argc, char **argv) +@@ -1267,11 +1356,6 @@ j++; } @@ -475,7 +284,7 @@ if (j == 0) { for (i=0; i/dev/null` || MACHINE="unknown" +-RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown" +-SYSTEM=`(uname -s) 2>/dev/null` || SYSTEM="unknown" +-VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown" ++[ "$MACHINE" ] || MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown" ++[ "$RELEASE" ] || RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown" ++[ "$SYSTEM" ] || SYSTEM=`(uname -s) 2>/dev/null` || SYSTEM="unknown" ++[ "$VERSION" ] || VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown" + + + # Now test for ISC and SCO, since it is has a braindamaged uname. +@@ -270,7 +270,7 @@ + echo "ppc-apple-darwin${VERSION}" + ;; + *) +- echo "i386-apple-darwin${VERSION}" ++ echo "${MACHINE}-apple-darwin${VERSION}" + ;; + esac + exit 0 +@@ -401,9 +401,9 @@ + + # figure out if gcc is available and if so we use it otherwise + # we fallback to whatever cc does on the system +-GCCVER=`(gcc -dumpversion) 2>/dev/null` ++CC="${CC:-gcc}" ++GCCVER=`(${CC} -dumpversion) 2>/dev/null` + if [ "$GCCVER" != "" ]; then +- CC=gcc + # then strip off whatever prefix egcs prepends the number with... + # Hopefully, this will work for any future prefixes as well. + GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'` +@@ -413,7 +413,7 @@ + # peak single digit before and after first dot, e.g. 2.95.1 gives 29 + GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'` + else +- CC=cc ++ CC="${CC:-cc}" + fi + GCCVER=${GCCVER:-0} + if [ "$SYSTEM" = "HP-UX" ];then +@@ -482,6 +482,9 @@ + # script above so we end up with values in vars but that would take + # more time that I want to waste at the moment + case "$GUESSOS" in ++ uClinux*) ++ OUT=uClinux-dist ++ ;; + mips2-sgi-irix) + CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'` + CPU=${CPU:-0} +diff -Naur openssl-0.9.8i.orig/crypto/cryptlib.h openssl-0.9.8i/crypto/cryptlib.h +--- openssl-0.9.8i.orig/crypto/cryptlib.h 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/cryptlib.h 2008-10-01 04:16:12.000000000 +0200 @@ -62,7 +62,7 @@ #include #include @@ -721,9 +589,10 @@ #ifdef OPENSSL_USE_APPLINK #define BIO_FLAGS_UPLINK 0x8000 ---- a/crypto/engine/eng_all.c -+++ b/crypto/engine/eng_all.c -@@ -104,7 +104,7 @@ void ENGINE_load_builtin_engines(void) +diff -Naur openssl-0.9.8i.orig/crypto/engine/eng_all.c openssl-0.9.8i/crypto/engine/eng_all.c +--- openssl-0.9.8i.orig/crypto/engine/eng_all.c 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/engine/eng_all.c 2008-10-01 04:17:20.000000000 +0200 +@@ -104,7 +104,7 @@ #endif #endif #ifndef OPENSSL_NO_HW @@ -732,7 +601,7 @@ ENGINE_load_cryptodev(); #endif #if defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_NO_CAPIENG) -@@ -113,7 +113,7 @@ void ENGINE_load_builtin_engines(void) +@@ -113,7 +113,7 @@ #endif } @@ -741,9 +610,10 @@ void ENGINE_setup_bsd_cryptodev(void) { static int bsd_cryptodev_default_loaded = 0; if (!bsd_cryptodev_default_loaded) { ---- a/crypto/engine/eng_cryptodev.c -+++ b/crypto/engine/eng_cryptodev.c -@@ -68,6 +68,16 @@ ENGINE_load_cryptodev(void) +diff -Naur openssl-0.9.8i.orig/crypto/engine/eng_cryptodev.c openssl-0.9.8i/crypto/engine/eng_cryptodev.c +--- openssl-0.9.8i.orig/crypto/engine/eng_cryptodev.c 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/engine/eng_cryptodev.c 2008-10-01 04:16:12.000000000 +0200 +@@ -68,6 +68,16 @@ struct dev_crypto_state { struct session_op d_sess; int d_fd; @@ -760,7 +630,7 @@ }; static u_int32_t cryptodev_asymfeat = 0; -@@ -75,9 +85,11 @@ static u_int32_t cryptodev_asymfeat = 0; +@@ -75,9 +85,11 @@ static int get_asym_dev_crypto(void); static int open_dev_crypto(void); static int get_dev_crypto(void); @@ -772,7 +642,7 @@ static int get_cryptodev_ciphers(const int **cnids); static int get_cryptodev_digests(const int **cnids); static int cryptodev_usable_ciphers(const int **nids); -@@ -100,7 +112,7 @@ static int cryptodev_asym(struct crypt_k +@@ -100,7 +112,7 @@ static int cryptodev_bn_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); static int cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, @@ -781,20 +651,15 @@ static int cryptodev_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); static int cryptodev_dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -@@ -130,9 +142,12 @@ static struct { - int ivmax; - int keylen; - } ciphers[] = { -+ { CRYPTO_ARC4, NID_rc4, 0, 16, }, +@@ -133,6 +145,7 @@ { CRYPTO_DES_CBC, NID_des_cbc, 8, 8, }, { CRYPTO_3DES_CBC, NID_des_ede3_cbc, 8, 24, }, { CRYPTO_AES_CBC, NID_aes_128_cbc, 16, 16, }, -+ { CRYPTO_AES_CBC, NID_aes_192_cbc, 16, 24, }, + { CRYPTO_AES_CBC, NID_aes_256_cbc, 16, 32, }, { CRYPTO_BLF_CBC, NID_bf_cbc, 8, 16, }, { CRYPTO_CAST_CBC, NID_cast5_cbc, 8, 16, }, { CRYPTO_SKIPJACK_CBC, NID_undef, 0, 0, }, -@@ -142,14 +157,15 @@ static struct { +@@ -142,14 +155,15 @@ static struct { int id; int nid; @@ -817,7 +682,7 @@ }; /* -@@ -176,10 +192,17 @@ open_dev_crypto(void) +@@ -176,10 +190,17 @@ static int get_dev_crypto(void) { @@ -838,7 +703,7 @@ if (ioctl(fd, CRIOGET, &retfd) == -1) return (-1); -@@ -202,6 +225,7 @@ get_asym_dev_crypto(void) +@@ -202,6 +223,7 @@ return fd; } @@ -846,7 +711,7 @@ /* * XXXX this needs to be set for each alg - and determined from * a running card. -@@ -245,6 +269,7 @@ cipher_nid_to_cryptodev(int nid) +@@ -245,6 +267,7 @@ return (ciphers[i].id); return (0); } @@ -854,7 +719,7 @@ /* * Find out what ciphers /dev/crypto will let us have a session for. -@@ -264,7 +289,7 @@ get_cryptodev_ciphers(const int **cnids) +@@ -264,7 +287,7 @@ return (0); } memset(&sess, 0, sizeof(sess)); @@ -863,7 +728,7 @@ for (i = 0; ciphers[i].id && count < CRYPTO_ALGORITHM_MAX; i++) { if (ciphers[i].nid == NID_undef) -@@ -303,10 +328,12 @@ get_cryptodev_digests(const int **cnids) +@@ -303,10 +326,12 @@ return (0); } memset(&sess, 0, sizeof(sess)); @@ -876,7 +741,7 @@ sess.cipher = 0; if (ioctl(fd, CIOCGSESSION, &sess) != -1 && ioctl(fd, CIOCFSESSION, &sess.ses) != -1) -@@ -351,6 +378,9 @@ cryptodev_usable_ciphers(const int **nid +@@ -351,6 +376,9 @@ static int cryptodev_usable_digests(const int **nids) { @@ -886,7 +751,7 @@ /* * XXXX just disable all digests for now, because it sucks. * we need a better way to decide this - i.e. I may not -@@ -365,6 +395,7 @@ cryptodev_usable_digests(const int **nid +@@ -365,6 +393,7 @@ */ *nids = NULL; return (0); @@ -894,16 +759,16 @@ } static int -@@ -427,16 +458,20 @@ cryptodev_init_key(EVP_CIPHER_CTX *ctx, +@@ -427,16 +456,20 @@ { struct dev_crypto_state *state = ctx->cipher_data; struct session_op *sess = &state->d_sess; - int cipher; -+ int cipher, i; - +- - if ((cipher = cipher_nid_to_cryptodev(ctx->cipher->nid)) == NID_undef) - return (0); -- ++ int cipher, i; + - if (ctx->cipher->iv_len > cryptodev_max_iv(cipher)) - return (0); + for (i = 0; ciphers[i].id; i++) @@ -922,44 +787,10 @@ memset(sess, 0, sizeof(struct session_op)); -@@ -496,6 +531,20 @@ cryptodev_cleanup(EVP_CIPHER_CTX *ctx) - * gets called when libcrypto requests a cipher NID. - */ - -+/* RC4 */ -+const EVP_CIPHER cryptodev_rc4 = { -+ NID_rc4, -+ 1, 16, 0, -+ EVP_CIPH_VARIABLE_LENGTH, -+ cryptodev_init_key, -+ cryptodev_cipher, -+ cryptodev_cleanup, -+ sizeof(struct dev_crypto_state), -+ NULL, -+ NULL, -+ NULL -+}; -+ - /* DES CBC EVP */ - const EVP_CIPHER cryptodev_des_cbc = { - NID_des_cbc, -@@ -563,6 +612,32 @@ const EVP_CIPHER cryptodev_aes_cbc = { +@@ -563,6 +596,19 @@ NULL }; -+const EVP_CIPHER cryptodev_aes_192_cbc = { -+ NID_aes_192_cbc, -+ 16, 24, 16, -+ EVP_CIPH_CBC_MODE, -+ cryptodev_init_key, -+ cryptodev_cipher, -+ cryptodev_cleanup, -+ sizeof(struct dev_crypto_state), -+ EVP_CIPHER_set_asn1_iv, -+ EVP_CIPHER_get_asn1_iv, -+ NULL -+}; -+ +const EVP_CIPHER cryptodev_aes_256_cbc = { + NID_aes_256_cbc, + 16, 32, 16, @@ -976,30 +807,17 @@ /* * Registered by the ENGINE when used to find out how to deal with * a particular NID in the ENGINE. this says what we'll do at the -@@ -576,6 +651,9 @@ cryptodev_engine_ciphers(ENGINE *e, cons - return (cryptodev_usable_ciphers(nids)); - - switch (nid) { -+ case NID_rc4: -+ *cipher = &cryptodev_rc4; -+ break; - case NID_des_ede3_cbc: - *cipher = &cryptodev_3des_cbc; - break; -@@ -591,6 +669,12 @@ cryptodev_engine_ciphers(ENGINE *e, cons +@@ -591,6 +637,9 @@ case NID_aes_128_cbc: *cipher = &cryptodev_aes_cbc; break; -+ case NID_aes_192_cbc: -+ *cipher = &cryptodev_aes_192_cbc; -+ break; + case NID_aes_256_cbc: + *cipher = &cryptodev_aes_256_cbc; + break; default: *cipher = NULL; break; -@@ -598,6 +682,234 @@ cryptodev_engine_ciphers(ENGINE *e, cons +@@ -598,6 +647,234 @@ return (*cipher != NULL); } @@ -1234,7 +1052,7 @@ static int cryptodev_engine_digests(ENGINE *e, const EVP_MD **digest, const int **nids, int nid) -@@ -606,10 +918,15 @@ cryptodev_engine_digests(ENGINE *e, cons +@@ -606,10 +883,15 @@ return (cryptodev_usable_digests(nids)); switch (nid) { @@ -1251,7 +1069,7 @@ *digest = NULL; break; } -@@ -625,7 +942,7 @@ static int +@@ -625,7 +907,7 @@ bn2crparam(const BIGNUM *a, struct crparam *crp) { int i, j, k; @@ -1260,7 +1078,7 @@ u_char *b; crp->crp_p = NULL; -@@ -637,6 +954,7 @@ bn2crparam(const BIGNUM *a, struct crpar +@@ -637,6 +919,7 @@ b = malloc(bytes); if (b == NULL) return (1); @@ -1268,7 +1086,7 @@ crp->crp_p = b; crp->crp_nbits = bits; -@@ -681,7 +999,7 @@ zapparams(struct crypt_kop *kop) +@@ -681,7 +964,7 @@ { int i; @@ -1277,7 +1095,7 @@ if (kop->crk_param[i].crp_p) free(kop->crk_param[i].crp_p); kop->crk_param[i].crp_p = NULL; -@@ -756,12 +1074,10 @@ err: +@@ -756,12 +1039,10 @@ } static int @@ -1292,9 +1110,22 @@ r = cryptodev_bn_mod_exp(r0, I, rsa->d, rsa->n, ctx, NULL); BN_CTX_free(ctx); return (r); ---- a/crypto/engine/engine.h -+++ b/crypto/engine/engine.h -@@ -703,7 +703,7 @@ typedef int (*dynamic_bind_engine)(ENGIN +diff -Naur openssl-0.9.8i.orig/crypto/engine/eng_table.c openssl-0.9.8i/crypto/engine/eng_table.c +--- openssl-0.9.8i.orig/crypto/engine/eng_table.c 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/engine/eng_table.c 2008-10-01 04:16:12.000000000 +0200 +@@ -186,6 +186,8 @@ + { + engine_unlocked_finish(e, 0); + pile->funct = NULL; ++ /* "touch" this ENGINE_CIPHER */ ++ pile->uptodate = 0; + } + } + static IMPLEMENT_LHASH_DOALL_ARG_FN(int_unregister_cb,ENGINE_PILE *,ENGINE *) +diff -Naur openssl-0.9.8i.orig/crypto/engine/engine.h openssl-0.9.8i/crypto/engine/engine.h +--- openssl-0.9.8i.orig/crypto/engine/engine.h 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/engine/engine.h 2008-10-01 04:16:12.000000000 +0200 +@@ -703,7 +703,7 @@ * values. */ void *ENGINE_get_static_state(void); @@ -1303,9 +1134,10 @@ void ENGINE_setup_bsd_cryptodev(void); #endif ---- a/crypto/evp/c_all.c -+++ b/crypto/evp/c_all.c -@@ -83,7 +83,7 @@ void OPENSSL_add_all_algorithms_noconf(v +diff -Naur openssl-0.9.8i.orig/crypto/evp/c_all.c openssl-0.9.8i/crypto/evp/c_all.c +--- openssl-0.9.8i.orig/crypto/evp/c_all.c 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/evp/c_all.c 2008-10-01 04:16:12.000000000 +0200 +@@ -83,7 +83,7 @@ OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); #ifndef OPENSSL_NO_ENGINE @@ -1314,9 +1146,10 @@ ENGINE_setup_bsd_cryptodev(); # endif #endif ---- a/crypto/evp/c_alld.c -+++ b/crypto/evp/c_alld.c -@@ -81,7 +81,7 @@ void OpenSSL_add_all_digests(void) +diff -Naur openssl-0.9.8i.orig/crypto/evp/c_alld.c openssl-0.9.8i/crypto/evp/c_alld.c +--- openssl-0.9.8i.orig/crypto/evp/c_alld.c 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/crypto/evp/c_alld.c 2008-10-01 04:16:12.000000000 +0200 +@@ -81,7 +81,7 @@ EVP_add_digest(EVP_dss()); #endif #endif @@ -1325,9 +1158,10 @@ EVP_add_digest(EVP_sha1()); EVP_add_digest_alias(SN_sha1,"ssl3-sha1"); EVP_add_digest_alias(SN_sha1WithRSAEncryption,SN_sha1WithRSA); ---- a/engines/Makefile -+++ b/engines/Makefile -@@ -96,6 +96,7 @@ install: +diff -Naur openssl-0.9.8i.orig/engines/Makefile openssl-0.9.8i/engines/Makefile +--- openssl-0.9.8i.orig/engines/Makefile 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/engines/Makefile 2008-10-01 04:16:12.000000000 +0200 +@@ -96,6 +96,7 @@ ( echo installing $$l; \ if [ "$(PLATFORM)" != "Cygwin" ]; then \ case "$(CFLAGS)" in \ @@ -1335,22 +1169,23 @@ *DSO_DLFCN*) sfx="so";; \ *DSO_DL*) sfx="sl";; \ *) sfx="bad";; \ ---- a/util/domd -+++ b/util/domd -@@ -23,13 +23,17 @@ if [ "$D" = "gcc" ]; then +diff -Naur openssl-0.9.8i.orig/util/domd openssl-0.9.8i/util/domd +--- openssl-0.9.8i.orig/util/domd 2008-10-01 04:16:01.000000000 +0200 ++++ openssl-0.9.8i/util/domd 2008-10-01 04:16:13.000000000 +0200 +@@ -23,13 +23,17 @@ done sed -e '/^# DO NOT DELETE.*/,$d' < Makefile > Makefile.tmp echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' >> Makefile.tmp - ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp -+ ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp && \ ++ ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp && ${PERL} $TOP/util/clean-depend.pl < Makefile.tmp > Makefile.new -+ RC=$? ++ RC=$? rm -f Makefile.tmp else - ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND $@ + ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND $@ && \ ${PERL} $TOP/util/clean-depend.pl < Makefile > Makefile.new -+ RC=$? ++ RC=$? fi mv Makefile.new Makefile # unfake the presence of Kerberos diff --git a/package/openssl/patches/205-use_local_cryptodev_h.patch b/package/openssl/patches/205-use_local_cryptodev_h.patch new file mode 100644 index 0000000000..a28320393c --- /dev/null +++ b/package/openssl/patches/205-use_local_cryptodev_h.patch @@ -0,0 +1,494 @@ +diff -Nur openssl-0.9.8h/crypto/engine/cryptodev.h openssl-0.9.8h-ocf/crypto/engine/cryptodev.h +--- openssl-0.9.8h/crypto/engine/cryptodev.h 1970-01-01 01:00:00.000000000 +0100 ++++ openssl-0.9.8h-ocf/crypto/engine/cryptodev.h 2008-07-13 15:32:53.000000000 +0200 +@@ -0,0 +1,478 @@ ++/* $FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.25 2007/05/09 19:37:02 gnn Exp $ */ ++/* $OpenBSD: cryptodev.h,v 1.31 2002/06/11 11:14:29 beck Exp $ */ ++ ++/*- ++ * Linux port done by David McCullough ++ * Copyright (C) 2006-2007 David McCullough ++ * Copyright (C) 2004-2005 Intel Corporation. ++ * The license and original author are listed below. ++ * ++ * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu) ++ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting ++ * ++ * This code was written by Angelos D. Keromytis in Athens, Greece, in ++ * February 2000. Network Security Technologies Inc. (NSTI) kindly ++ * supported the development of this code. ++ * ++ * Copyright (c) 2000 Angelos D. Keromytis ++ * ++ * Permission to use, copy, and modify this software with or without fee ++ * is hereby granted, provided that this entire notice is included in ++ * all source code copies of any software which is or includes a copy or ++ * modification of this software. ++ * ++ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR ++ * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY ++ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE ++ * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR ++ * PURPOSE. ++ * ++ * Copyright (c) 2001 Theo de Raadt ++ * ++ * 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. The name of the author may not be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. ++ * ++ * Effort sponsored in part by the Defense Advanced Research Projects ++ * Agency (DARPA) and Air Force Research Laboratory, Air Force ++ * Materiel Command, USAF, under agreement number F30602-01-2-0537. ++ * ++ */ ++ ++#ifndef _CRYPTO_CRYPTO_H_ ++#define _CRYPTO_CRYPTO_H_ ++ ++/* Some initial values */ ++#define CRYPTO_DRIVERS_INITIAL 4 ++#define CRYPTO_SW_SESSIONS 32 ++ ++/* Hash values */ ++#define NULL_HASH_LEN 0 ++#define MD5_HASH_LEN 16 ++#define SHA1_HASH_LEN 20 ++#define RIPEMD160_HASH_LEN 20 ++#define SHA2_256_HASH_LEN 32 ++#define SHA2_384_HASH_LEN 48 ++#define SHA2_512_HASH_LEN 64 ++#define MD5_KPDK_HASH_LEN 16 ++#define SHA1_KPDK_HASH_LEN 20 ++/* Maximum hash algorithm result length */ ++#define HASH_MAX_LEN SHA2_512_HASH_LEN /* Keep this updated */ ++ ++/* HMAC values */ ++#define NULL_HMAC_BLOCK_LEN 1 ++#define MD5_HMAC_BLOCK_LEN 64 ++#define SHA1_HMAC_BLOCK_LEN 64 ++#define RIPEMD160_HMAC_BLOCK_LEN 64 ++#define SHA2_256_HMAC_BLOCK_LEN 64 ++#define SHA2_384_HMAC_BLOCK_LEN 128 ++#define SHA2_512_HMAC_BLOCK_LEN 128 ++/* Maximum HMAC block length */ ++#define HMAC_MAX_BLOCK_LEN SHA2_512_HMAC_BLOCK_LEN /* Keep this updated */ ++#define HMAC_IPAD_VAL 0x36 ++#define HMAC_OPAD_VAL 0x5C ++ ++/* Encryption algorithm block sizes */ ++#define NULL_BLOCK_LEN 1 ++#define DES_BLOCK_LEN 8 ++#define DES3_BLOCK_LEN 8 ++#define BLOWFISH_BLOCK_LEN 8 ++#define SKIPJACK_BLOCK_LEN 8 ++#define CAST128_BLOCK_LEN 8 ++#define RIJNDAEL128_BLOCK_LEN 16 ++#define AES_BLOCK_LEN RIJNDAEL128_BLOCK_LEN ++#define CAMELLIA_BLOCK_LEN 16 ++#define ARC4_BLOCK_LEN 1 ++#define EALG_MAX_BLOCK_LEN AES_BLOCK_LEN /* Keep this updated */ ++ ++/* Encryption algorithm min and max key sizes */ ++#define NULL_MIN_KEY_LEN 0 ++#define NULL_MAX_KEY_LEN 0 ++#define DES_MIN_KEY_LEN 8 ++#define DES_MAX_KEY_LEN 8 ++#define DES3_MIN_KEY_LEN 24 ++#define DES3_MAX_KEY_LEN 24 ++#define BLOWFISH_MIN_KEY_LEN 4 ++#define BLOWFISH_MAX_KEY_LEN 56 ++#define SKIPJACK_MIN_KEY_LEN 10 ++#define SKIPJACK_MAX_KEY_LEN 10 ++#define CAST128_MIN_KEY_LEN 5 ++#define CAST128_MAX_KEY_LEN 16 ++#define RIJNDAEL128_MIN_KEY_LEN 16 ++#define RIJNDAEL128_MAX_KEY_LEN 32 ++#define AES_MIN_KEY_LEN RIJNDAEL128_MIN_KEY_LEN ++#define AES_MAX_KEY_LEN RIJNDAEL128_MAX_KEY_LEN ++#define CAMELLIA_MIN_KEY_LEN 16 ++#define CAMELLIA_MAX_KEY_LEN 32 ++#define ARC4_MIN_KEY_LEN 1 ++#define ARC4_MAX_KEY_LEN 256 ++ ++/* Max size of data that can be processed */ ++#define CRYPTO_MAX_DATA_LEN 64*1024 - 1 ++ ++#define CRYPTO_ALGORITHM_MIN 1 ++#define CRYPTO_DES_CBC 1 ++#define CRYPTO_3DES_CBC 2 ++#define CRYPTO_BLF_CBC 3 ++#define CRYPTO_CAST_CBC 4 ++#define CRYPTO_SKIPJACK_CBC 5 ++#define CRYPTO_MD5_HMAC 6 ++#define CRYPTO_SHA1_HMAC 7 ++#define CRYPTO_RIPEMD160_HMAC 8 ++#define CRYPTO_MD5_KPDK 9 ++#define CRYPTO_SHA1_KPDK 10 ++#define CRYPTO_RIJNDAEL128_CBC 11 /* 128 bit blocksize */ ++#define CRYPTO_AES_CBC 11 /* 128 bit blocksize -- the same as above */ ++#define CRYPTO_ARC4 12 ++#define CRYPTO_MD5 13 ++#define CRYPTO_SHA1 14 ++#define CRYPTO_NULL_HMAC 15 ++#define CRYPTO_NULL_CBC 16 ++#define CRYPTO_DEFLATE_COMP 17 /* Deflate compression algorithm */ ++#define CRYPTO_SHA2_256_HMAC 18 ++#define CRYPTO_SHA2_384_HMAC 19 ++#define CRYPTO_SHA2_512_HMAC 20 ++#define CRYPTO_CAMELLIA_CBC 21 ++#define CRYPTO_SHA2_256 22 ++#define CRYPTO_SHA2_384 23 ++#define CRYPTO_SHA2_512 24 ++#define CRYPTO_RIPEMD160 25 ++#define CRYPTO_ALGORITHM_MAX 25 /* Keep updated - see below */ ++ ++/* Algorithm flags */ ++#define CRYPTO_ALG_FLAG_SUPPORTED 0x01 /* Algorithm is supported */ ++#define CRYPTO_ALG_FLAG_RNG_ENABLE 0x02 /* Has HW RNG for DH/DSA */ ++#define CRYPTO_ALG_FLAG_DSA_SHA 0x04 /* Can do SHA on msg */ ++ ++/* ++ * Crypto driver/device flags. They can set in the crid ++ * parameter when creating a session or submitting a key ++ * op to affect the device/driver assigned. If neither ++ * of these are specified then the crid is assumed to hold ++ * the driver id of an existing (and suitable) device that ++ * must be used to satisfy the request. ++ */ ++#define CRYPTO_FLAG_HARDWARE 0x01000000 /* hardware accelerated */ ++#define CRYPTO_FLAG_SOFTWARE 0x02000000 /* software implementation */ ++ ++/* NB: deprecated */ ++struct session_op { ++ u_int32_t cipher; /* ie. CRYPTO_DES_CBC */ ++ u_int32_t mac; /* ie. CRYPTO_MD5_HMAC */ ++ ++ u_int32_t keylen; /* cipher key */ ++ caddr_t key; ++ int mackeylen; /* mac key */ ++ caddr_t mackey; ++ ++ u_int32_t ses; /* returns: session # */ ++}; ++ ++struct session2_op { ++ u_int32_t cipher; /* ie. CRYPTO_DES_CBC */ ++ u_int32_t mac; /* ie. CRYPTO_MD5_HMAC */ ++ ++ u_int32_t keylen; /* cipher key */ ++ caddr_t key; ++ int mackeylen; /* mac key */ ++ caddr_t mackey; ++ ++ u_int32_t ses; /* returns: session # */ ++ int crid; /* driver id + flags (rw) */ ++ int pad[4]; /* for future expansion */ ++}; ++ ++struct crypt_op { ++ u_int32_t ses; ++ u_int16_t op; /* i.e. COP_ENCRYPT */ ++#define COP_NONE 0 ++#define COP_ENCRYPT 1 ++#define COP_DECRYPT 2 ++ u_int16_t flags; ++#define COP_F_BATCH 0x0008 /* Batch op if possible */ ++ u_int len; ++ caddr_t src, dst; /* become iov[] inside kernel */ ++ caddr_t mac; /* must be big enough for chosen MAC */ ++ caddr_t iv; ++}; ++ ++/* ++ * Parameters for looking up a crypto driver/device by ++ * device name or by id. The latter are returned for ++ * created sessions (crid) and completed key operations. ++ */ ++struct crypt_find_op { ++ int crid; /* driver id + flags */ ++ char name[32]; /* device/driver name */ ++}; ++ ++/* bignum parameter, in packed bytes, ... */ ++struct crparam { ++ caddr_t crp_p; ++ u_int crp_nbits; ++}; ++ ++#define CRK_MAXPARAM 8 ++ ++struct crypt_kop { ++ u_int crk_op; /* ie. CRK_MOD_EXP or other */ ++ u_int crk_status; /* return status */ ++ u_short crk_iparams; /* # of input parameters */ ++ u_short crk_oparams; /* # of output parameters */ ++ u_int crk_crid; /* NB: only used by CIOCKEY2 (rw) */ ++ struct crparam crk_param[CRK_MAXPARAM]; ++}; ++#define CRK_ALGORITM_MIN 0 ++#define CRK_MOD_EXP 0 ++#define CRK_MOD_EXP_CRT 1 ++#define CRK_DSA_SIGN 2 ++#define CRK_DSA_VERIFY 3 ++#define CRK_DH_COMPUTE_KEY 4 ++#define CRK_ALGORITHM_MAX 4 /* Keep updated - see below */ ++ ++#define CRF_MOD_EXP (1 << CRK_MOD_EXP) ++#define CRF_MOD_EXP_CRT (1 << CRK_MOD_EXP_CRT) ++#define CRF_DSA_SIGN (1 << CRK_DSA_SIGN) ++#define CRF_DSA_VERIFY (1 << CRK_DSA_VERIFY) ++#define CRF_DH_COMPUTE_KEY (1 << CRK_DH_COMPUTE_KEY) ++ ++/* ++ * done against open of /dev/crypto, to get a cloned descriptor. ++ * Please use F_SETFD against the cloned descriptor. ++ */ ++#define CRIOGET _IOWR('c', 100, u_int32_t) ++#define CRIOASYMFEAT CIOCASYMFEAT ++#define CRIOFINDDEV CIOCFINDDEV ++ ++/* the following are done against the cloned descriptor */ ++#define CIOCGSESSION _IOWR('c', 101, struct session_op) ++#define CIOCFSESSION _IOW('c', 102, u_int32_t) ++#define CIOCCRYPT _IOWR('c', 103, struct crypt_op) ++#define CIOCKEY _IOWR('c', 104, struct crypt_kop) ++#define CIOCASYMFEAT _IOR('c', 105, u_int32_t) ++#define CIOCGSESSION2 _IOWR('c', 106, struct session2_op) ++#define CIOCKEY2 _IOWR('c', 107, struct crypt_kop) ++#define CIOCFINDDEV _IOWR('c', 108, struct crypt_find_op) ++ ++struct cryptotstat { ++ struct timespec acc; /* total accumulated time */ ++ struct timespec min; /* min time */ ++ struct timespec max; /* max time */ ++ u_int32_t count; /* number of observations */ ++}; ++ ++struct cryptostats { ++ u_int32_t cs_ops; /* symmetric crypto ops submitted */ ++ u_int32_t cs_errs; /* symmetric crypto ops that failed */ ++ u_int32_t cs_kops; /* asymetric/key ops submitted */ ++ u_int32_t cs_kerrs; /* asymetric/key ops that failed */ ++ u_int32_t cs_intrs; /* crypto swi thread activations */ ++ u_int32_t cs_rets; /* crypto return thread activations */ ++ u_int32_t cs_blocks; /* symmetric op driver block */ ++ u_int32_t cs_kblocks; /* symmetric op driver block */ ++ /* ++ * When CRYPTO_TIMING is defined at compile time and the ++ * sysctl debug.crypto is set to 1, the crypto system will ++ * accumulate statistics about how long it takes to process ++ * crypto requests at various points during processing. ++ */ ++ struct cryptotstat cs_invoke; /* crypto_dipsatch -> crypto_invoke */ ++ struct cryptotstat cs_done; /* crypto_invoke -> crypto_done */ ++ struct cryptotstat cs_cb; /* crypto_done -> callback */ ++ struct cryptotstat cs_finis; /* callback -> callback return */ ++ ++ u_int32_t cs_drops; /* crypto ops dropped due to congestion */ ++}; ++ ++#ifdef __KERNEL__ ++ ++/* Standard initialization structure beginning */ ++struct cryptoini { ++ int cri_alg; /* Algorithm to use */ ++ int cri_klen; /* Key length, in bits */ ++ int cri_mlen; /* Number of bytes we want from the ++ entire hash. 0 means all. */ ++ caddr_t cri_key; /* key to use */ ++ u_int8_t cri_iv[EALG_MAX_BLOCK_LEN]; /* IV to use */ ++ struct cryptoini *cri_next; ++}; ++ ++/* Describe boundaries of a single crypto operation */ ++struct cryptodesc { ++ int crd_skip; /* How many bytes to ignore from start */ ++ int crd_len; /* How many bytes to process */ ++ int crd_inject; /* Where to inject results, if applicable */ ++ int crd_flags; ++ ++#define CRD_F_ENCRYPT 0x01 /* Set when doing encryption */ ++#define CRD_F_IV_PRESENT 0x02 /* When encrypting, IV is already in ++ place, so don't copy. */ ++#define CRD_F_IV_EXPLICIT 0x04 /* IV explicitly provided */ ++#define CRD_F_DSA_SHA_NEEDED 0x08 /* Compute SHA-1 of buffer for DSA */ ++#define CRD_F_KEY_EXPLICIT 0x10 /* Key explicitly provided */ ++#define CRD_F_COMP 0x0f /* Set when doing compression */ ++ ++ struct cryptoini CRD_INI; /* Initialization/context data */ ++#define crd_iv CRD_INI.cri_iv ++#define crd_key CRD_INI.cri_key ++#define crd_alg CRD_INI.cri_alg ++#define crd_klen CRD_INI.cri_klen ++ ++ struct cryptodesc *crd_next; ++}; ++ ++/* Structure describing complete operation */ ++struct cryptop { ++ struct list_head crp_next; ++ wait_queue_head_t crp_waitq; ++ ++ u_int64_t crp_sid; /* Session ID */ ++ int crp_ilen; /* Input data total length */ ++ int crp_olen; /* Result total length */ ++ ++ int crp_etype; /* ++ * Error type (zero means no error). ++ * All error codes except EAGAIN ++ * indicate possible data corruption (as in, ++ * the data have been touched). On all ++ * errors, the crp_sid may have changed ++ * (reset to a new one), so the caller ++ * should always check and use the new ++ * value on future requests. ++ */ ++ int crp_flags; ++ ++#define CRYPTO_F_SKBUF 0x0001 /* Input/output are skbuf chains */ ++#define CRYPTO_F_IOV 0x0002 /* Input/output are uio */ ++#define CRYPTO_F_REL 0x0004 /* Must return data in same place */ ++#define CRYPTO_F_BATCH 0x0008 /* Batch op if possible */ ++#define CRYPTO_F_CBIMM 0x0010 /* Do callback immediately */ ++#define CRYPTO_F_DONE 0x0020 /* Operation completed */ ++#define CRYPTO_F_CBIFSYNC 0x0040 /* Do CBIMM if op is synchronous */ ++ ++ caddr_t crp_buf; /* Data to be processed */ ++ caddr_t crp_opaque; /* Opaque pointer, passed along */ ++ struct cryptodesc *crp_desc; /* Linked list of processing descriptors */ ++ ++ int (*crp_callback)(struct cryptop *); /* Callback function */ ++}; ++ ++#define CRYPTO_BUF_CONTIG 0x0 ++#define CRYPTO_BUF_IOV 0x1 ++#define CRYPTO_BUF_SKBUF 0x2 ++ ++#define CRYPTO_OP_DECRYPT 0x0 ++#define CRYPTO_OP_ENCRYPT 0x1 ++ ++/* ++ * Hints passed to process methods. ++ */ ++#define CRYPTO_HINT_MORE 0x1 /* more ops coming shortly */ ++ ++struct cryptkop { ++ struct list_head krp_next; ++ wait_queue_head_t krp_waitq; ++ ++ int krp_flags; ++#define CRYPTO_KF_DONE 0x0001 /* Operation completed */ ++#define CRYPTO_KF_CBIMM 0x0002 /* Do callback immediately */ ++ ++ u_int krp_op; /* ie. CRK_MOD_EXP or other */ ++ u_int krp_status; /* return status */ ++ u_short krp_iparams; /* # of input parameters */ ++ u_short krp_oparams; /* # of output parameters */ ++ u_int krp_crid; /* desired device, etc. */ ++ u_int32_t krp_hid; ++ struct crparam krp_param[CRK_MAXPARAM]; /* kvm */ ++ int (*krp_callback)(struct cryptkop *); ++}; ++ ++#include ++ ++/* ++ * Session ids are 64 bits. The lower 32 bits contain a "local id" which ++ * is a driver-private session identifier. The upper 32 bits contain a ++ * "hardware id" used by the core crypto code to identify the driver and ++ * a copy of the driver's capabilities that can be used by client code to ++ * optimize operation. ++ */ ++#define CRYPTO_SESID2HID(_sid) (((_sid) >> 32) & 0x00ffffff) ++#define CRYPTO_SESID2CAPS(_sid) (((_sid) >> 32) & 0xff000000) ++#define CRYPTO_SESID2LID(_sid) (((u_int32_t) (_sid)) & 0xffffffff) ++ ++extern int crypto_newsession(u_int64_t *sid, struct cryptoini *cri, int hard); ++extern int crypto_freesession(u_int64_t sid); ++#define CRYPTOCAP_F_HARDWARE CRYPTO_FLAG_HARDWARE ++#define CRYPTOCAP_F_SOFTWARE CRYPTO_FLAG_SOFTWARE ++#define CRYPTOCAP_F_SYNC 0x04000000 /* operates synchronously */ ++extern int32_t crypto_get_driverid(device_t dev, int flags); ++extern int crypto_find_driver(const char *); ++extern device_t crypto_find_device_byhid(int hid); ++extern int crypto_getcaps(int hid); ++extern int crypto_register(u_int32_t driverid, int alg, u_int16_t maxoplen, ++ u_int32_t flags); ++extern int crypto_kregister(u_int32_t, int, u_int32_t); ++extern int crypto_unregister(u_int32_t driverid, int alg); ++extern int crypto_unregister_all(u_int32_t driverid); ++extern int crypto_dispatch(struct cryptop *crp); ++extern int crypto_kdispatch(struct cryptkop *); ++#define CRYPTO_SYMQ 0x1 ++#define CRYPTO_ASYMQ 0x2 ++extern int crypto_unblock(u_int32_t, int); ++extern void crypto_done(struct cryptop *crp); ++extern void crypto_kdone(struct cryptkop *); ++extern int crypto_getfeat(int *); ++ ++extern void crypto_freereq(struct cryptop *crp); ++extern struct cryptop *crypto_getreq(int num); ++ ++extern int crypto_usercrypto; /* userland may do crypto requests */ ++extern int crypto_userasymcrypto; /* userland may do asym crypto reqs */ ++extern int crypto_devallowsoft; /* only use hardware crypto */ ++ ++/* ++ * random number support, crypto_unregister_all will unregister ++ */ ++extern int crypto_rregister(u_int32_t driverid, ++ int (*read_random)(void *arg, u_int32_t *buf, int len), void *arg); ++extern int crypto_runregister_all(u_int32_t driverid); ++ ++/* ++ * Crypto-related utility routines used mainly by drivers. ++ * ++ * XXX these don't really belong here; but for now they're ++ * kept apart from the rest of the system. ++ */ ++struct uio; ++extern void cuio_copydata(struct uio* uio, int off, int len, caddr_t cp); ++extern void cuio_copyback(struct uio* uio, int off, int len, caddr_t cp); ++extern struct iovec *cuio_getptr(struct uio *uio, int loc, int *off); ++ ++extern void crypto_copyback(int flags, caddr_t buf, int off, int size, ++ caddr_t in); ++extern void crypto_copydata(int flags, caddr_t buf, int off, int size, ++ caddr_t out); ++extern int crypto_apply(int flags, caddr_t buf, int off, int len, ++ int (*f)(void *, void *, u_int), void *arg); ++ ++#endif /* __KERNEL__ */ ++#endif /* _CRYPTO_CRYPTO_H_ */ +diff -Nur openssl-0.9.8h/crypto/engine/eng_cryptodev.c openssl-0.9.8h-ocf/crypto/engine/eng_cryptodev.c +--- openssl-0.9.8h/crypto/engine/eng_cryptodev.c 2008-07-13 15:32:53.000000000 +0200 ++++ openssl-0.9.8h-ocf/crypto/engine/eng_cryptodev.c 2008-07-13 15:34:19.000000000 +0200 +@@ -54,7 +54,7 @@ + #else + + #include +-#include ++#include "cryptodev.h" + #include + #include + #include diff --git a/package/openssl/patches/400-cve_2008_5077.patch b/package/openssl/patches/400-cve_2008_5077.patch new file mode 100644 index 0000000000..bc16ffd1ea --- /dev/null +++ b/package/openssl/patches/400-cve_2008_5077.patch @@ -0,0 +1,151 @@ +diff -ur openssl-0.9.8i-ORIG/apps/speed.c openssl-0.9.8i/apps/speed.c +--- openssl-0.9.8i/apps/speed.c 2007-11-15 13:33:47.000000000 +0000 ++++ openssl-0.9.8i/apps/speed-new.c 2008-12-04 00:00:00.000000000 +0000 +@@ -2132,7 +2132,7 @@ + { + ret=RSA_verify(NID_md5_sha1, buf,36, buf2, + rsa_num, rsa_key[j]); +- if (ret == 0) ++ if (ret <= 0) + { + BIO_printf(bio_err, + "RSA verify failure\n"); +diff -ur openssl-0.9.8i-ORIG/apps/spkac.c openssl-0.9.8i/apps/spkac.c +--- openssl-0.9.8i-ORIG/apps/spkac.c 2005-04-05 19:11:18.000000000 +0000 ++++ openssl-0.9.8i/apps/spkac.c 2008-12-04 00:00:00.000000000 +0000 +@@ -285,7 +285,7 @@ + pkey = NETSCAPE_SPKI_get_pubkey(spki); + if(verify) { + i = NETSCAPE_SPKI_verify(spki, pkey); +- if(i) BIO_printf(bio_err, "Signature OK\n"); ++ if (i > 0) BIO_printf(bio_err, "Signature OK\n"); + else { + BIO_printf(bio_err, "Signature Failure\n"); + ERR_print_errors(bio_err); +diff -ur openssl-0.9.8i-ORIG/apps/verify.c openssl-0.9.8i/apps/verify.c +--- openssl-0.9.8i-ORIG/apps/verify.c 2004-11-29 11:28:07.000000000 +0000 ++++ openssl-0.9.8i/apps/verify.c 2008-12-04 00:00:00.600000000 +0000 +@@ -266,7 +266,7 @@ + + ret=0; + end: +- if (i) ++ if (i > 0) + { + fprintf(stdout,"OK\n"); + ret=1; +@@ -367,4 +367,3 @@ + ERR_clear_error(); + return(ok); + } +- +diff -ur openssl-0.9.8i-ORIG/apps/x509.c openssl-0.9.8i/apps/x509.c +--- openssl-0.9.8i-ORIG/apps/x509.c 2007-10-12 00:00:10.000000000 +0000 ++++ openssl-0.9.8i/apps/x509.c 2008-12-04 00:00:00.400000000 +0000 +@@ -1151,7 +1151,7 @@ + /* NOTE: this certificate can/should be self signed, unless it was + * a certificate request in which case it is not. */ + X509_STORE_CTX_set_cert(&xsc,x); +- if (!reqfile && !X509_verify_cert(&xsc)) ++ if (!reqfile && X509_verify_cert(&xsc) <= 0) + goto end; + + if (!X509_check_private_key(xca,pkey)) +diff -ur openssl-0.9.8i-ORIG/crypto/cms/cms_sd.c openssl-0.9.8i/crypto/cms/cms_sd.c +--- openssl-0.9.8i-ORIG/crypto/cms/cms_sd.c 2008-04-06 16:30:38.000000000 +0000 ++++ openssl-0.9.8i/crypto/cms/cms_sd.c 2008-12-04 00:00:00.400000000 +0000 +@@ -830,7 +830,7 @@ + cms_fixup_mctx(&mctx, si->pkey); + r = EVP_VerifyFinal(&mctx, + si->signature->data, si->signature->length, si->pkey); +- if (!r) ++ if (r <= 0) + CMSerr(CMS_F_CMS_SIGNERINFO_VERIFY, CMS_R_VERIFICATION_FAILURE); + err: + EVP_MD_CTX_cleanup(&mctx); +diff -ur openssl-0.9.8i-ORIG/ssl/s2_clnt.c openssl-0.9.8i/ssl/s2_clnt.c +--- openssl-0.9.8i-ORIG/ssl/s2_clnt.c 2007-09-06 12:43:53.000000000 +0000 ++++ openssl-0.9.8i/ssl/s2_clnt.c 2008-12-04 00:00:00.100000000 +0000 +@@ -1044,7 +1044,7 @@ + + i=ssl_verify_cert_chain(s,sk); + +- if ((s->verify_mode != SSL_VERIFY_NONE) && (!i)) ++ if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0)) + { + SSLerr(SSL_F_SSL2_SET_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED); + goto err; +diff -ur openssl-0.9.8i-ORIG/ssl/s2_srvr.c openssl-0.9.8i/ssl/s2_srvr.c +--- openssl-0.9.8i-ORIG/ssl/s2_srvr.c 2007-09-06 12:43:53.000000000 +0000 ++++ openssl-0.9.8i/ssl/s2_srvr.c 2008-12-04 00:00:00.900000000 +0000 +@@ -1054,7 +1054,7 @@ + + i=ssl_verify_cert_chain(s,sk); + +- if (i) /* we like the packet, now check the chksum */ ++ if (i > 0) /* we like the packet, now check the chksum */ + { + EVP_MD_CTX ctx; + EVP_PKEY *pkey=NULL; +@@ -1083,7 +1083,7 @@ + EVP_PKEY_free(pkey); + EVP_MD_CTX_cleanup(&ctx); + +- if (i) ++ if (i > 0) + { + if (s->session->peer != NULL) + X509_free(s->session->peer); +diff -ur openssl-0.9.8i-ORIG/ssl/s3_clnt.c openssl-0.9.8i/ssl/s3_clnt.c +--- openssl-0.9.8i-ORIG/ssl/s3_clnt.c 2008-06-16 16:56:41.000000000 +0000 ++++ openssl-0.9.8i/ssl/s3_clnt.c 2008-12-04 00:00:00.100000000 +0000 +@@ -972,7 +972,7 @@ + } + + i=ssl_verify_cert_chain(s,sk); +- if ((s->verify_mode != SSL_VERIFY_NONE) && (!i) ++ if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0) + #ifndef OPENSSL_NO_KRB5 + && (s->s3->tmp.new_cipher->algorithms & (SSL_MKEY_MASK|SSL_AUTH_MASK)) + != (SSL_aKRB5|SSL_kKRB5) +@@ -1459,7 +1459,7 @@ + EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); + EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); + EVP_VerifyUpdate(&md_ctx,param,param_len); +- if (!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) ++ if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0) + { + /* bad signature */ + al=SSL_AD_DECRYPT_ERROR; +@@ -1477,7 +1477,7 @@ + EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); + EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); + EVP_VerifyUpdate(&md_ctx,param,param_len); +- if (!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) ++ if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0) + { + /* bad signature */ + al=SSL_AD_DECRYPT_ERROR; +diff -ur openssl-0.9.8i-ORIG/ssl/s3_srvr.c openssl-0.9.8i/ssl/s3_srvr.c +--- openssl-0.9.8i-ORIG/ssl/s3_srvr.c 2008-09-14 18:16:09.000000000 +0000 ++++ openssl-0.9.8i/ssl/s3_srvr.c 2008-12-04 00:00:00.100000000 +0000 +@@ -2560,7 +2560,7 @@ + else + { + i=ssl_verify_cert_chain(s,sk); +- if (!i) ++ if (i <= 0) + { + al=ssl_verify_alarm_type(s->verify_result); + SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATE_RETURNED); +diff -ur openssl-0.9.8i-ORIG/ssl/ssltest.c openssl-0.9.8i/ssl/ssltest.c +--- openssl-0.9.8i-ORIG/ssl/ssltest.c 2008-06-16 16:56:42.000000000 +0000 ++++ openssl-0.9.8i/ssl/ssltest.c 2008-12-04 00:00:00.900000000 +0000 +@@ -2093,7 +2093,7 @@ + + if (cb_arg->proxy_auth) + { +- if (ok) ++ if (ok > 0) + { + const char *cond_end = NULL; diff --git a/package/openssl/patches/401_cve_2009_0590.patch b/package/openssl/patches/401_cve_2009_0590.patch new file mode 100644 index 0000000000..c6e22befb5 --- /dev/null +++ b/package/openssl/patches/401_cve_2009_0590.patch @@ -0,0 +1,75 @@ +http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-0590 + +--- a/crypto/asn1/asn1.h ++++ b/crypto/asn1/asn1.h +@@ -1217,6 +1217,7 @@ void ERR_load_ASN1_strings(void); + #define ASN1_R_BAD_OBJECT_HEADER 102 + #define ASN1_R_BAD_PASSWORD_READ 103 + #define ASN1_R_BAD_TAG 104 ++#define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 210 + #define ASN1_R_BN_LIB 105 + #define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 + #define ASN1_R_BUFFER_TOO_SMALL 107 +@@ -1306,6 +1307,7 @@ void ERR_load_ASN1_strings(void); + #define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 + #define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 + #define ASN1_R_UNEXPECTED_EOC 159 ++#define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 211 + #define ASN1_R_UNKNOWN_FORMAT 160 + #define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 + #define ASN1_R_UNKNOWN_OBJECT_TYPE 162 +--- a/crypto/asn1/asn1_err.c ++++ b/crypto/asn1/asn1_err.c +@@ -195,6 +195,7 @@ static ERR_STRING_DATA ASN1_str_reasons[ + {ERR_REASON(ASN1_R_BAD_OBJECT_HEADER) ,"bad object header"}, + {ERR_REASON(ASN1_R_BAD_PASSWORD_READ) ,"bad password read"}, + {ERR_REASON(ASN1_R_BAD_TAG) ,"bad tag"}, ++{ERR_REASON(ASN1_R_BMPSTRING_IS_WRONG_LENGTH),"bmpstring is wrong length"}, + {ERR_REASON(ASN1_R_BN_LIB) ,"bn lib"}, + {ERR_REASON(ASN1_R_BOOLEAN_IS_WRONG_LENGTH),"boolean is wrong length"}, + {ERR_REASON(ASN1_R_BUFFER_TOO_SMALL) ,"buffer too small"}, +@@ -284,6 +285,7 @@ static ERR_STRING_DATA ASN1_str_reasons[ + {ERR_REASON(ASN1_R_UNABLE_TO_DECODE_RSA_KEY),"unable to decode rsa key"}, + {ERR_REASON(ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY),"unable to decode rsa private key"}, + {ERR_REASON(ASN1_R_UNEXPECTED_EOC) ,"unexpected eoc"}, ++{ERR_REASON(ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH),"universalstring is wrong length"}, + {ERR_REASON(ASN1_R_UNKNOWN_FORMAT) ,"unknown format"}, + {ERR_REASON(ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM),"unknown message digest algorithm"}, + {ERR_REASON(ASN1_R_UNKNOWN_OBJECT_TYPE) ,"unknown object type"}, +--- a/crypto/asn1/tasn_dec.c ++++ b/crypto/asn1/tasn_dec.c +@@ -611,7 +611,6 @@ static int asn1_template_ex_d2i(ASN1_VAL + + err: + ASN1_template_free(val, tt); +- *val = NULL; + return 0; + } + +@@ -758,7 +757,6 @@ static int asn1_template_noexp_d2i(ASN1_ + + err: + ASN1_template_free(val, tt); +- *val = NULL; + return 0; + } + +@@ -1012,6 +1010,18 @@ int asn1_ex_c2i(ASN1_VALUE **pval, const + case V_ASN1_SET: + case V_ASN1_SEQUENCE: + default: ++ if (utype == V_ASN1_BMPSTRING && (len & 1)) ++ { ++ ASN1err(ASN1_F_ASN1_EX_C2I, ++ ASN1_R_BMPSTRING_IS_WRONG_LENGTH); ++ goto err; ++ } ++ if (utype == V_ASN1_UNIVERSALSTRING && (len & 3)) ++ { ++ ASN1err(ASN1_F_ASN1_EX_C2I, ++ ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH); ++ goto err; ++ } + /* All based on ASN1_STRING and handled the same */ + if (!*pval) + { -- 2.30.2