diff options
author | Nick Bofferding <bofferdn@us.ibm.com> | 2019-06-15 21:35:29 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2019-06-18 09:31:43 -0500 |
commit | c070a3d6521e5f3931418b809b7c8f2a0dc7a101 (patch) | |
tree | c17315fd86b62ec31a1e77b73e8d8657773eff13 /src/securerom | |
parent | 93f529ed118b6e2414a257ae9e412b08ae09eac0 (diff) | |
download | talos-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.C | 38 |
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)) ); } } |