From c070a3d6521e5f3931418b809b7c8f2a0dc7a101 Mon Sep 17 00:00:00 2001 From: Nick Bofferding Date: Sat, 15 Jun 2019 21:35:29 -0500 Subject: 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 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Ilya Smirnov Reviewed-by: Christopher J. Engel Reviewed-by: Daniel M. Crowell --- src/securerom/ecverify.C | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'src/securerom') 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> 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