]> wagner.pp.ru Git - openssl-gost/engine.git/commitdiff
Fix Streebog alignment problem 130/head
authorVitaly Chikunov <vt@altlinux.org>
Wed, 10 Apr 2019 18:09:54 +0000 (18:09 +0000)
committerVitaly Chikunov <vt@altlinux.org>
Wed, 10 Apr 2019 18:31:10 +0000 (21:31 +0300)
Some architectures in some circumstances do not allow unaligned
memory access (such as ARM, MIPS) triggering SIGBUS. This patch
very crudely fixes this issue.

The issue is found and original fix is proposed by Eric Biggers:

  https://patchwork.kernel.org/patch/10878865/

gosthash2012.c

index ee534c2f9f838f2ef52797c23e88e63f98b9b5ef..bbe7dcbf83d1cb8932bf24d34b10c5f9540e04dd 100644 (file)
@@ -157,10 +157,13 @@ static void g(union uint512_u *h, const union uint512_u *N,
 
 static INLINE void stage2(gost2012_hash_ctx * CTX, const unsigned char *data)
 {
-    g(&(CTX->h), &(CTX->N), data);
+    union uint512_u m;
+
+    memcpy(&m, data, sizeof(m));
+    g(&(CTX->h), &(CTX->N), (const unsigned char *)&m);
 
     add512(&(CTX->N), &buffer512, &(CTX->N));
-    add512(&(CTX->Sigma), (const union uint512_u *)data, &(CTX->Sigma));
+    add512(&(CTX->Sigma), &m, &(CTX->Sigma));
 }
 
 static INLINE void stage3(gost2012_hash_ctx * CTX)