xref: /minix3/crypto/external/bsd/openssl/dist/PROBLEMS (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc* System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X.
2*ebfedea0SLionel Sambuc
3*ebfedea0SLionel Sambuc
4*ebfedea0SLionel Sambuc    NOTE: The problem described here only applies when OpenSSL isn't built
5*ebfedea0SLionel Sambuc    with shared library support (i.e. without the "shared" configuration
6*ebfedea0SLionel Sambuc    option).  If you build with shared library support, you will have no
7*ebfedea0SLionel Sambuc    problems as long as you set up DYLD_LIBRARY_PATH properly at all times.
8*ebfedea0SLionel Sambuc
9*ebfedea0SLionel Sambuc
10*ebfedea0SLionel SambucThis is really a misfeature in ld, which seems to look for .dylib libraries
11*ebfedea0SLionel Sambucalong the whole library path before it bothers looking for .a libraries.  This
12*ebfedea0SLionel Sambucmeans that -L switches won't matter unless OpenSSL is built with shared
13*ebfedea0SLionel Sambuclibrary support.
14*ebfedea0SLionel Sambuc
15*ebfedea0SLionel SambucThe workaround may be to change the following lines in apps/Makefile and
16*ebfedea0SLionel Sambuctest/Makefile:
17*ebfedea0SLionel Sambuc
18*ebfedea0SLionel Sambuc  LIBCRYPTO=-L.. -lcrypto
19*ebfedea0SLionel Sambuc  LIBSSL=-L.. -lssl
20*ebfedea0SLionel Sambuc
21*ebfedea0SLionel Sambucto:
22*ebfedea0SLionel Sambuc
23*ebfedea0SLionel Sambuc  LIBCRYPTO=../libcrypto.a
24*ebfedea0SLionel Sambuc  LIBSSL=../libssl.a
25*ebfedea0SLionel Sambuc
26*ebfedea0SLionel SambucIt's possible that something similar is needed for shared library support
27*ebfedea0SLionel Sambucas well.  That hasn't been well tested yet.
28*ebfedea0SLionel Sambuc
29*ebfedea0SLionel Sambuc
30*ebfedea0SLionel SambucAnother solution that many seem to recommend is to move the libraries
31*ebfedea0SLionel Sambuc/usr/lib/libcrypto.0.9.dylib, /usr/lib/libssl.0.9.dylib to a different
32*ebfedea0SLionel Sambucdirectory, build and install OpenSSL and anything that depends on your
33*ebfedea0SLionel Sambucbuild, then move libcrypto.0.9.dylib and libssl.0.9.dylib back to their
34*ebfedea0SLionel Sambucoriginal places.  Note that the version numbers on those two libraries
35*ebfedea0SLionel Sambucmay differ on your machine.
36*ebfedea0SLionel Sambuc
37*ebfedea0SLionel Sambuc
38*ebfedea0SLionel SambucAs long as Apple doesn't fix the problem with ld, this problem building
39*ebfedea0SLionel SambucOpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by
40*ebfedea0SLionel Sambucpassing -Wl,-search_paths_first, but it's unknown if the flag was
41*ebfedea0SLionel Sambucsupported from the initial MacOS X release.
42*ebfedea0SLionel Sambuc
43*ebfedea0SLionel Sambuc
44*ebfedea0SLionel Sambuc* Parallell make leads to errors
45*ebfedea0SLionel Sambuc
46*ebfedea0SLionel SambucWhile running tests, running a parallell make is a bad idea.  Many test
47*ebfedea0SLionel Sambucscripts use the same name for output and input files, which means different
48*ebfedea0SLionel Sambucwill interfere with each other and lead to test failure.
49*ebfedea0SLionel Sambuc
50*ebfedea0SLionel SambucThe solution is simple for now: don't run parallell make when testing.
51*ebfedea0SLionel Sambuc
52*ebfedea0SLionel Sambuc
53*ebfedea0SLionel Sambuc* Bugs in gcc triggered
54*ebfedea0SLionel Sambuc
55*ebfedea0SLionel Sambuc- According to a problem report, there are bugs in gcc 3.0 that are
56*ebfedea0SLionel Sambuc  triggered by some of the code in OpenSSL, more specifically in
57*ebfedea0SLionel Sambuc  PEM_get_EVP_CIPHER_INFO().  The triggering code is the following:
58*ebfedea0SLionel Sambuc
59*ebfedea0SLionel Sambuc	header+=11;
60*ebfedea0SLionel Sambuc	if (*header != '4') return(0); header++;
61*ebfedea0SLionel Sambuc	if (*header != ',') return(0); header++;
62*ebfedea0SLionel Sambuc
63*ebfedea0SLionel Sambuc  What happens is that gcc might optimize a little too agressively, and
64*ebfedea0SLionel Sambuc  you end up with an extra incrementation when *header != '4'.
65*ebfedea0SLionel Sambuc
66*ebfedea0SLionel Sambuc  We recommend that you upgrade gcc to as high a 3.x version as you can.
67*ebfedea0SLionel Sambuc
68*ebfedea0SLionel Sambuc- According to multiple problem reports, some of our message digest
69*ebfedea0SLionel Sambuc  implementations trigger bug[s] in code optimizer in gcc 3.3 for sparc64
70*ebfedea0SLionel Sambuc  and gcc 2.96 for ppc. Former fails to complete RIPEMD160 test, while
71*ebfedea0SLionel Sambuc  latter - SHA one.
72*ebfedea0SLionel Sambuc
73*ebfedea0SLionel Sambuc  The recomendation is to upgrade your compiler. This naturally applies to
74*ebfedea0SLionel Sambuc  other similar cases.
75*ebfedea0SLionel Sambuc
76*ebfedea0SLionel Sambuc- There is a subtle Solaris x86-specific gcc run-time environment bug, which
77*ebfedea0SLionel Sambuc  "falls between" OpenSSL [0.9.8 and later], Solaris ld and GCC. The bug
78*ebfedea0SLionel Sambuc  manifests itself as Segmentation Fault upon early application start-up.
79*ebfedea0SLionel Sambuc  The problem can be worked around by patching the environment according to
80*ebfedea0SLionel Sambuc  http://www.openssl.org/~appro/values.c.
81*ebfedea0SLionel Sambuc
82*ebfedea0SLionel Sambuc* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
83*ebfedea0SLionel Sambuc
84*ebfedea0SLionel SambucAs subject suggests SHA-1 might perform poorly (4 times slower)
85*ebfedea0SLionel Sambucif compiled with WorkShop 6 compiler and -xarch=v9. The cause for
86*ebfedea0SLionel Sambucthis seems to be the fact that compiler emits multiplication to
87*ebfedea0SLionel Sambucperform shift operations:-( To work the problem around configure
88*ebfedea0SLionel Sambucwith './Configure solaris64-sparcv9-cc -DMD32_REG_T=int'.
89*ebfedea0SLionel Sambuc
90*ebfedea0SLionel Sambuc* Problems with hp-parisc2-cc target when used with "no-asm" flag
91*ebfedea0SLionel Sambuc
92*ebfedea0SLionel SambucWhen using the hp-parisc2-cc target, wrong bignum code is generated.
93*ebfedea0SLionel SambucThis is due to the SIXTY_FOUR_BIT build being compiled with the +O3
94*ebfedea0SLionel Sambucaggressive optimization.
95*ebfedea0SLionel SambucThe problem manifests itself by the BN_kronecker test hanging in an
96*ebfedea0SLionel Sambucendless loop. Reason: the BN_kronecker test calls BN_generate_prime()
97*ebfedea0SLionel Sambucwhich itself hangs. The reason could be tracked down to the bn_mul_comba8()
98*ebfedea0SLionel Sambucfunction in bn_asm.c. At some occasions the higher 32bit value of r[7]
99*ebfedea0SLionel Sambucis off by 1 (meaning: calculated=shouldbe+1). Further analysis failed,
100*ebfedea0SLionel Sambucas no debugger support possible at +O3 and additional fprintf()'s
101*ebfedea0SLionel Sambucintroduced fixed the bug, therefore it is most likely a bug in the
102*ebfedea0SLionel Sambucoptimizer.
103*ebfedea0SLionel SambucThe bug was found in the BN_kronecker test but may also lead to
104*ebfedea0SLionel Sambucfailures in other parts of the code.
105*ebfedea0SLionel Sambuc(See Ticket #426.)
106*ebfedea0SLionel Sambuc
107*ebfedea0SLionel SambucWorkaround: modify the target to +O2 when building with no-asm.
108*ebfedea0SLionel Sambuc
109*ebfedea0SLionel Sambuc* Problems building shared libraries on SCO OpenServer Release 5.0.6
110*ebfedea0SLionel Sambuc  with gcc 2.95.3
111*ebfedea0SLionel Sambuc
112*ebfedea0SLionel SambucThe symptoms appear when running the test suite, more specifically
113*ebfedea0SLionel Sambuctest/ectest, with the following result:
114*ebfedea0SLionel Sambuc
115*ebfedea0SLionel SambucOSSL_LIBPATH="`cd ..; pwd`"; LD_LIBRARY_PATH="$OSSL_LIBPATH:$LD_LIBRARY_PATH"; DYLD_LIBRARY_PATH="$OSSL_LIBPATH:$DYLD_LIBRARY_PATH"; SHLIB_PATH="$OSSL_LIBPATH:$SHLIB_PATH"; LIBPATH="$OSSL_LIBPATH:$LIBPATH"; if [ "debug-sco5-gcc" = "Cygwin" ]; then PATH="${LIBPATH}:$PATH"; fi; export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; ./ectest
116*ebfedea0SLionel Sambucectest.c:186: ABORT
117*ebfedea0SLionel Sambuc
118*ebfedea0SLionel SambucThe cause of the problem seems to be that isxdigit(), called from
119*ebfedea0SLionel SambucBN_hex2bn(), returns 0 on a perfectly legitimate hex digit.  Further
120*ebfedea0SLionel Sambucinvestigation shows that any of the isxxx() macros return 0 on any
121*ebfedea0SLionel Sambucinput.  A direct look in the information array that the isxxx() use,
122*ebfedea0SLionel Sambuccalled __ctype, shows that it contains all zeroes...
123*ebfedea0SLionel Sambuc
124*ebfedea0SLionel SambucTaking a look at the newly created libcrypto.so with nm, one can see
125*ebfedea0SLionel Sambucthat the variable __ctype is defined in libcrypto's .bss (which
126*ebfedea0SLionel Sambucexplains why it is filled with zeroes):
127*ebfedea0SLionel Sambuc
128*ebfedea0SLionel Sambuc$ nm -Pg libcrypto.so | grep __ctype
129*ebfedea0SLionel Sambuc__ctype B 0011659c
130*ebfedea0SLionel Sambuc__ctype2 U
131*ebfedea0SLionel Sambuc
132*ebfedea0SLionel SambucCuriously, __ctype2 is undefined, in spite of being declared in
133*ebfedea0SLionel Sambuc/usr/include/ctype.h in exactly the same way as __ctype.
134*ebfedea0SLionel Sambuc
135*ebfedea0SLionel SambucAny information helping to solve this issue would be deeply
136*ebfedea0SLionel Sambucappreciated.
137*ebfedea0SLionel Sambuc
138*ebfedea0SLionel SambucNOTE: building non-shared doesn't come with this problem.
139*ebfedea0SLionel Sambuc
140*ebfedea0SLionel Sambuc* ULTRIX build fails with shell errors, such as "bad substitution"
141*ebfedea0SLionel Sambuc  and "test: argument expected"
142*ebfedea0SLionel Sambuc
143*ebfedea0SLionel SambucThe problem is caused by ULTRIX /bin/sh supporting only original
144*ebfedea0SLionel SambucBourne shell syntax/semantics, and the trouble is that the vast
145*ebfedea0SLionel Sambucmajority is so accustomed to more modern syntax, that very few
146*ebfedea0SLionel Sambucpeople [if any] would recognize the ancient syntax even as valid.
147*ebfedea0SLionel SambucThis inevitably results in non-trivial scripts breaking on ULTRIX,
148*ebfedea0SLionel Sambucand OpenSSL isn't an exclusion. Fortunately there is workaround,
149*ebfedea0SLionel Sambuchire /bin/ksh to do the job /bin/sh fails to do.
150*ebfedea0SLionel Sambuc
151*ebfedea0SLionel Sambuc1. Trick make(1) to use /bin/ksh by setting up following environ-
152*ebfedea0SLionel Sambuc   ment variables *prior* you execute ./Configure and make:
153*ebfedea0SLionel Sambuc
154*ebfedea0SLionel Sambuc	PROG_ENV=POSIX
155*ebfedea0SLionel Sambuc	MAKESHELL=/bin/ksh
156*ebfedea0SLionel Sambuc	export PROG_ENV MAKESHELL
157*ebfedea0SLionel Sambuc
158*ebfedea0SLionel Sambuc   or if your shell is csh-compatible:
159*ebfedea0SLionel Sambuc
160*ebfedea0SLionel Sambuc	setenv PROG_ENV POSIX
161*ebfedea0SLionel Sambuc	setenv MAKESHELL /bin/ksh
162*ebfedea0SLionel Sambuc
163*ebfedea0SLionel Sambuc2. Trick /bin/sh to use alternative expression evaluator. Create
164*ebfedea0SLionel Sambuc   following 'test' script for example in /tmp:
165*ebfedea0SLionel Sambuc
166*ebfedea0SLionel Sambuc	#!/bin/ksh
167*ebfedea0SLionel Sambuc	${0##*/} "$@"
168*ebfedea0SLionel Sambuc
169*ebfedea0SLionel Sambuc   Then 'chmod a+x /tmp/test; ln /tmp/test /tmp/[' and *prepend*
170*ebfedea0SLionel Sambuc   your $PATH with chosen location, e.g. PATH=/tmp:$PATH. Alter-
171*ebfedea0SLionel Sambuc   natively just replace system /bin/test and /bin/[ with the
172*ebfedea0SLionel Sambuc   above script.
173*ebfedea0SLionel Sambuc
174*ebfedea0SLionel Sambuc* hpux64-ia64-cc fails blowfish test.
175*ebfedea0SLionel Sambuc
176*ebfedea0SLionel SambucCompiler bug, presumably at particular patch level. It should be noted
177*ebfedea0SLionel Sambucthat same compiler generates correct 32-bit code, a.k.a. hpux-ia64-cc
178*ebfedea0SLionel Sambuctarget. Drop optimization level to +O2 when compiling 64-bit bf_skey.o.
179*ebfedea0SLionel Sambuc
180*ebfedea0SLionel Sambuc* no-engines generates errors.
181*ebfedea0SLionel Sambuc
182*ebfedea0SLionel SambucUnfortunately, the 'no-engines' configuration option currently doesn't
183*ebfedea0SLionel Sambucwork properly.  Use 'no-hw' and you'll will at least get no hardware
184*ebfedea0SLionel Sambucsupport.  We'll see how we fix that on OpenSSL versions past 0.9.8.
185*ebfedea0SLionel Sambuc
186*ebfedea0SLionel Sambuc* 'make test' fails in BN_sqr [commonly with "error 139" denoting SIGSEGV]
187*ebfedea0SLionel Sambuc  if elder GNU binutils were deployed to link shared libcrypto.so.
188*ebfedea0SLionel Sambuc
189*ebfedea0SLionel SambucAs subject suggests the failure is caused by a bug in elder binutils,
190*ebfedea0SLionel Sambuceither as or ld, and was observed on FreeBSD and Linux. There are two
191*ebfedea0SLionel Sambucoptions. First is naturally to upgrade binutils, the second one - to
192*ebfedea0SLionel Sambucreconfigure with additional no-sse2 [or 386] option passed to ./config.
193*ebfedea0SLionel Sambuc
194*ebfedea0SLionel Sambuc* If configured with ./config no-dso, toolkit still gets linked with -ldl,
195*ebfedea0SLionel Sambuc  which most notably poses a problem when linking with dietlibc.
196*ebfedea0SLionel Sambuc
197*ebfedea0SLionel SambucWe don't have framework to associate -ldl with no-dso, therefore the only
198*ebfedea0SLionel Sambucway is to edit Makefile right after ./config no-dso and remove -ldl from
199*ebfedea0SLionel SambucEX_LIBS line.
200*ebfedea0SLionel Sambuc
201*ebfedea0SLionel Sambuc* hpux-parisc2-cc no-asm build fails with SEGV in ECDSA/DH.
202*ebfedea0SLionel Sambuc
203*ebfedea0SLionel SambucCompiler bug, presumably at particular patch level. Remaining
204*ebfedea0SLionel Sambuchpux*-parisc*-cc configurations can be affected too. Drop optimization
205*ebfedea0SLionel Sambuclevel to +O2 when compiling bn_nist.o.
206*ebfedea0SLionel Sambuc
207*ebfedea0SLionel Sambuc* solaris64-sparcv9-cc link failure
208*ebfedea0SLionel Sambuc
209*ebfedea0SLionel SambucSolaris 8 ar can fail to maintain symbol table in .a, which results in
210*ebfedea0SLionel Sambuclink failures. Apply 109147-09 or later or modify Makefile generated
211*ebfedea0SLionel Sambucby ./Configure solaris64-sparcv9-cc and replace RANLIB assignment with
212*ebfedea0SLionel Sambuc
213*ebfedea0SLionel Sambuc	RANLIB= /usr/ccs/bin/ar rs
214