Module Name: src Committed By: mrg Date: Wed Jun 15 05:01:58 UTC 2016
Modified Files: src/crypto/external/bsd/openssh/dist: umac.c src/doc: HACKS Log Message: 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. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/crypto/external/bsd/openssh/dist/umac.c cvs rdiff -u -r1.169 -r1.170 src/doc/HACKS Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/crypto/external/bsd/openssh/dist/umac.c diff -u src/crypto/external/bsd/openssh/dist/umac.c:1.10 src/crypto/external/bsd/openssh/dist/umac.c:1.11 --- src/crypto/external/bsd/openssh/dist/umac.c:1.10 Wed Jun 15 02:12:14 2016 +++ src/crypto/external/bsd/openssh/dist/umac.c Wed Jun 15 05:01:58 2016 @@ -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, con /* ---------------------------------------------------------------------- */ #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, UW 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); } } Index: src/doc/HACKS diff -u src/doc/HACKS:1.169 src/doc/HACKS:1.170 --- src/doc/HACKS:1.169 Wed Jun 15 02:12:14 2016 +++ src/doc/HACKS Wed Jun 15 05:01:58 2016 @@ -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