summaryrefslogtreecommitdiffstats
path: root/src/securerom
diff options
context:
space:
mode:
authorNick Bofferding <bofferdn@us.ibm.com>2019-06-15 21:35:29 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2019-06-18 09:31:43 -0500
commitc070a3d6521e5f3931418b809b7c8f2a0dc7a101 (patch)
treec17315fd86b62ec31a1e77b73e8d8657773eff13 /src/securerom
parent93f529ed118b6e2414a257ae9e412b08ae09eac0 (diff)
downloadtalos-hostboot-c070a3d6521e5f3931418b809b7c8f2a0dc7a101.tar.gz
talos-hostboot-c070a3d6521e5f3931418b809b7c8f2a0dc7a101.zip
Fix gcc8 signature validation anomaly
Fixes an issue where signature validation fails when the crypto library is compiled under GCC8. Change-Id: I4d586f7df537c062dd8e50a9c2052701446b2213 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79007 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Ilya Smirnov <ismirno@us.ibm.com> Reviewed-by: Christopher J. Engel <cjengel@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/securerom')
-rw-r--r--src/securerom/ecverify.C38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/securerom/ecverify.C b/src/securerom/ecverify.C
index 6df77df15..7b4b21d25 100644
--- a/src/securerom/ecverify.C
+++ b/src/securerom/ecverify.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016,2017 */
+/* Contributors Listed Below - COPYRIGHT 2016,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -506,20 +506,22 @@ static void bn_mul (bn_t *r, const bn_t *a, const bn_t *b)
a += NWORDS;
for (i=0; i<NWORDS; i++)
{
- asm("mulld %0,%1,%2" //pl = *(--a) * tb
+ --a;
+ asm("mulld %0,%1,%2" //pl = *(a) * tb
: "=r" (pl)
- : "r" (*(--a)), "r" (tb)
+ : "r" (*(a)), "r" (tb)
);
asm("mulhdu %0,%1,%2" //ph = *a * tb
: "=r" (ph)
: "r" (*a), "r" (tb)
);
- asm("addc %1,%5,%4\n" //pl += *(--r)
+ --r;
+ asm("addc %1,%5,%4\n" //pl += *(r)
"addze %2,%6\n" //ph += ca
"addc %0,%5,%7\n" //*r = pl + th
"addze %3,%6" //th = ph + ca
: "=r" (*r), "=r" (pl), "=r" (ph), "=r" (th)
- : "0" (*(--r)), "1" (pl), "2" (ph), "3" (th)
+ : "0" (*(r)), "1" (pl), "2" (ph), "3" (th)
);
}
*(--r) = th;
@@ -674,22 +676,26 @@ static void bn_modred_fast (bn_t *r, bn_t *a)
for (i=0; i<NWORDS-2; i++) {
t1 = *(--ah) << 55;
t2 = *ah >> 9;
- asm("addc %3,%7,%5\n" //t3 = *(--al) + t0;
+ --al;
+ --r;
+ asm("addc %3,%7,%5\n" //t3 = *(al) + t0;
"addze %2,%6\n" //t2 += ca;
- "addc %0,%4,%8\n" //*(--r) = t3 + t1;
+ "addc %0,%4,%8\n" //*(r) = t3 + t1;
"addze %1,%6" //t0 = t2 + ca;
- : "=r" (*(--r)), "=r" (t0), "=r" (t2), "=r" (t3)
- : "3" (t3), "1" (t0), "2" (t2), "r" (*(--al)), "r" (t1)
+ : "=r" (*(r)), "=r" (t0), "=r" (t2), "=r" (t3)
+ : "3" (t3), "1" (t0), "2" (t2), "r" (*(al)), "r" (t1)
);
}
t1 = *(--ah) << 55;
t2 = (*ah >> 9)&BN_PRIME_MSW_MASK;
- asm("addc %3,%7,%5\n" //t3 = *(--al) + t0;
+ --al;
+ --r;
+ asm("addc %3,%7,%5\n" //t3 = *(al) + t0;
"addze %2,%6\n" //t2 += ca;
- "addc %0,%4,%8\n" //*(--r) = t3 + t1;
+ "addc %0,%4,%8\n" //*(r) = t3 + t1;
"addze %1,%6" //t0 = t2 + ca;
- : "=r" (*(--r)), "=r" (t0), "=r" (t2), "=r" (t3)
- : "3" (t3), "1" (t0), "2" (t2), "r" (*(--al)), "r" (t1)
+ : "=r" (*(r)), "=r" (t0), "=r" (t2), "=r" (t3)
+ : "3" (t3), "1" (t0), "2" (t2), "r" (*(al)), "r" (t1)
);
*(--r) = (*(--al)&BN_PRIME_MSW_MASK) + t0;
}
@@ -702,15 +708,17 @@ static void __attribute__((noinline)) bn_modred_slow (bn_t *r)
bn_t t0 = *r >> 9;
*r &= BN_PRIME_MSW_MASK;
r += NWORDS;
+ --r;
asm("addc %0,%1,%2"
: "=r" (*r)
- : "0" (*(--r)), "r" (t0)
+ : "0" (*(r)), "r" (t0)
);
for (i=0; i<NWORDS-1; i++)
{
+ --r;
asm("addze %0,%1"
: "=r" (*r)
- : "0" (*(--r))
+ : "0" (*(r))
);
}
}
OpenPOWER on IntegriCloud