crypto: sha1-powerpc - little-endian support
authorMarcelo Cerri <marcelo.cerri@canonical.com>
Fri, 23 Sep 2016 19:31:56 +0000 (16:31 -0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 2 Oct 2016 14:31:53 +0000 (22:31 +0800)
The driver does not handle endianness properly when loading the input
data.

Signed-off-by: Marcelo Cerri <marcelo.cerri@canonical.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/powerpc/crypto/sha1-powerpc-asm.S

index 125e165..82ddc9b 100644 (file)
@@ -7,6 +7,15 @@
 #include <asm/ppc_asm.h>
 #include <asm/asm-offsets.h>
 
+#ifdef __BIG_ENDIAN__
+#define LWZ(rt, d, ra) \
+       lwz     rt,d(ra)
+#else
+#define LWZ(rt, d, ra) \
+       li      rt,d;   \
+       lwbrx   rt,rt,ra
+#endif
+
 /*
  * We roll the registers for T, A, B, C, D, E around on each
  * iteration; T on iteration t is A on iteration t+1, and so on.
@@ -23,7 +32,7 @@
 #define W(t)   (((t)%16)+16)
 
 #define LOADW(t)                               \
-       lwz     W(t),(t)*4(r4)
+       LWZ(W(t),(t)*4,r4)
 
 #define STEPD0_LOAD(t)                         \
        andc    r0,RD(t),RB(t);         \
@@ -33,7 +42,7 @@
        add     r0,RE(t),r15;                   \
        add     RT(t),RT(t),r6;         \
        add     r14,r0,W(t);                    \
-       lwz     W((t)+4),((t)+4)*4(r4); \
+       LWZ(W((t)+4),((t)+4)*4,r4);     \
        rotlwi  RB(t),RB(t),30;                 \
        add     RT(t),RT(t),r14