On Wed, Feb 13, 2013 at 12:19:19PM +0100, Andy Polyakov via RT wrote:
>
> > Probably this "strict aliasing" 64-bit optimization bug for
> > "crypto/bn/bn_nist.c"
What bug are you talking about? There doesn't seem to be a strict
aliasing warning in that file, and they use a union to get around
the problem.
> > Mac OSX compiler fail test/ectest: cc [Apple LLVM version 4.2
> > (clang-425.0.24) (based on LLVM 3.2svn)] gcc-mp-4.3 gcc-mp-4.4 gcc-mp-4.5
> > gcc-mp-4.6 clang-mp-3.0 clang-mp-3.1 clang-mp-3.2
> >
> > Mac OSX compiler test/ectest OK: gcc-apple-4.2 gcc-mp-4.7 gcc-mp-4.8
> > [gcc-mp-4.8 (MacPorts gcc48 4.8-20130203_0+universal) 4.8.0 20130203
> > (experimental)] clang-mp-2.9 clang-mp-3.3 [clang version 3.3 (trunk 173279)]
I can at least reproduce the problem with clang 3.0.
It works without problems with gcc 4.7.
> Could you test following *instead*? In every #if defined(NIST_INT64)
> section you'll see a number of references to bp[something]. Can you
> replace them with buf.ui[samething] and run the test? Currently bp is
> constified buf.ui and it might give overeager compiler idea to reorder
> references to buf in #if defined(NIST_IN64) section and [inlined]
> nist_cp_bn_0 and cause the mayhem.
That doesn't change anything. I still get:
testing internal curves: ...........
EC_GROUP_check() failed with curve secp384r1
.
EC_GROUP_check() failed with curve prime192v1
EC_GROUP_check() failed with curve prime192v2
EC_GROUP_check() failed with curve prime192v3
...
EC_GROUP_check() failed with curve prime256v1
............................................... failed
ectest.c:1268: ABORT
Kurt
PS: I think at least this patch makes sense, but doesn't change anything:
--- a/crypto/bn/bn_nist.c
+++ b/crypto/bn/bn_nist.c
@@ -530,7 +530,7 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const
BIGNUM *field,
{
NIST_INT64 acc; /* accumulator */
unsigned int *rp=(unsigned int *)r_d;
- const unsigned int *bp=(const unsigned int *)buf;
+ const unsigned int *bp=(const unsigned int *)buf.ui;
acc = rp[0]; acc -= bp[7-7];
acc -= bp[11-7]; rp[0] = (unsigned int)acc; acc >>= 32;
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [email protected]
Automated List Manager [email protected]