svn commit: r244974 - head/crypto/openssl/crypto/bn

Xin LI delphij at FreeBSD.org
Wed Jan 2 20:58:47 UTC 2013


Author: delphij
Date: Wed Jan  2 20:58:46 2013
New Revision: 244974
URL: http://svnweb.freebsd.org/changeset/base/244974

Log:
  MFV r244973:
  
    Integrate OpenSSL changeset 22950 (appro):
  
          bn_word.c: fix overflow bug in BN_add_word.
  
  MFC after:	2 weeks

Modified:
  head/crypto/openssl/crypto/bn/bn_word.c
Directory Properties:
  head/crypto/openssl/   (props changed)

Modified: head/crypto/openssl/crypto/bn/bn_word.c
==============================================================================
--- head/crypto/openssl/crypto/bn/bn_word.c	Wed Jan  2 20:56:53 2013	(r244973)
+++ head/crypto/openssl/crypto/bn/bn_word.c	Wed Jan  2 20:58:46 2013	(r244974)
@@ -144,26 +144,17 @@ int BN_add_word(BIGNUM *a, BN_ULONG w)
 			a->neg=!(a->neg);
 		return(i);
 		}
-	/* Only expand (and risk failing) if it's possibly necessary */
-	if (((BN_ULONG)(a->d[a->top - 1] + 1) == 0) &&
-			(bn_wexpand(a,a->top+1) == NULL))
-		return(0);
-	i=0;
-	for (;;)
+	for (i=0;w!=0 && i<a->top;i++)
 		{
-		if (i >= a->top)
-			l=w;
-		else
-			l=(a->d[i]+w)&BN_MASK2;
-		a->d[i]=l;
-		if (w > l)
-			w=1;
-		else
-			break;
-		i++;
+		a->d[i] = l = (a->d[i]+w)&BN_MASK2;
+		w = (w>l)?1:0;
 		}
-	if (i >= a->top)
+	if (w && i==a->top)
+		{
+		if (bn_wexpand(a,a->top+1) == NULL) return 0;
 		a->top++;
+		a->d[i]=w;
+		}
 	bn_check_top(a);
 	return(1);
 	}


More information about the svn-src-all mailing list