diff options
| author | mrg <mrg@NetBSD.org> | 2016-06-15 05:01:58 +0000 |
|---|---|---|
| committer | mrg <mrg@NetBSD.org> | 2016-06-15 05:01:58 +0000 |
| commit | dede62b2338dde1d16dfdaf96db1dc1ec3a08a6c (patch) | |
| tree | 2e818c214fb49257f5dd1f3a9bd7724b70eed053 | |
| parent | 7216ce7e479913d30f7384fc481fe69789c37af4 (diff) | |
replace the previous hack with something that i believe is actually
correct and, more importantly ;), works properly.
thanks for riastradh for hints about which bit was actually broken.
| -rw-r--r-- | crypto/external/bsd/openssh/dist/umac.c | 19 | ||||
| -rw-r--r-- | doc/HACKS | 14 |
2 files changed, 9 insertions, 24 deletions
diff --git a/crypto/external/bsd/openssh/dist/umac.c b/crypto/external/bsd/openssh/dist/umac.c index b3aa5735f18..6bba6c3d23a 100644 --- a/crypto/external/bsd/openssh/dist/umac.c +++ b/crypto/external/bsd/openssh/dist/umac.c @@ -1,4 +1,4 @@ -/* $NetBSD: umac.c,v 1.10 2016/06/15 02:12:14 mrg Exp $ */ +/* $NetBSD: umac.c,v 1.11 2016/06/15 05:01:58 mrg Exp $ */ /* $OpenBSD: umac.c,v 1.11 2014/07/22 07:13:42 guenther Exp $ */ /* ----------------------------------------------------------------------- * @@ -67,7 +67,7 @@ /* ---------------------------------------------------------------------- */ #include "includes.h" -__RCSID("$NetBSD: umac.c,v 1.10 2016/06/15 02:12:14 mrg Exp $"); +__RCSID("$NetBSD: umac.c,v 1.11 2016/06/15 05:01:58 mrg Exp $"); #include <sys/types.h> #include <sys/endian.h> #include <string.h> @@ -566,9 +566,6 @@ static void nh_transform(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes) /* ---------------------------------------------------------------------- */ #if (__LITTLE_ENDIAN__) -#if __GNUC_PREREQ__(5, 3) && defined(__arm__) -__attribute__((__optimize__("no-strict-aliasing"))) -#endif static void endian_convert(void *buf, UWORD bpw, UINT32 num_bytes) /* We endian convert the keys on little-endian computers to */ /* compensate for the lack of big-endian memory reads during hashing. */ @@ -581,13 +578,13 @@ static void endian_convert(void *buf, UWORD bpw, UINT32 num_bytes) p++; } while (--iters); } else if (bpw == 8) { - UINT32 *p = (UINT32 *)buf; - UINT32 t; + UINT64 *p = (UINT64 *)buf; + UINT64 th; + UINT64 t; do { - t = LOAD_UINT32_REVERSED(p+1); - p[1] = LOAD_UINT32_REVERSED(p); - p[0] = t; - p += 2; + t = LOAD_UINT32_REVERSED((UINT32 *)p+1); + th = LOAD_UINT32_REVERSED((UINT32 *)p); + *p++ = t | (th << 32); } while (--iters); } } diff --git a/doc/HACKS b/doc/HACKS index e894b8b33b8..b96e872844d 100644 --- a/doc/HACKS +++ b/doc/HACKS @@ -1,4 +1,4 @@ -# $NetBSD: HACKS,v 1.169 2016/06/15 02:12:14 mrg Exp $ +# $NetBSD: HACKS,v 1.170 2016/06/15 05:01:58 mrg Exp $ # # This file is intended to document workarounds for currently unsolved # (mostly) compiler bugs. @@ -635,18 +635,6 @@ port arm is broken. kcah - hack gcc-5.3 arm and openssh and -fstrict-aliases - cdate Tue Jun 14 19:05:51 PDT 2016 - who mrg - file crypto/external/bsd/openssh/dist/umac.c : 1.10 - pr - descr GCC has some yet-unknown code-gen problem on ARM with this - file that leads to SSH giving errors and dropping connections. - The bpw=8 path of endian_convert(), if compiled with - "no-strict-aliases" optimiser attribite, works. The same - problem exist with GCC 5.3 and 5.4. - kcah - port sh3 hack gcc4-sh3-bz2 |
