diff options
author | Mike Frysinger <vapier@gentoo.org> | 2007-08-25 16:08:30 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2007-08-25 16:08:30 +0000 |
commit | ce221a65261e4386b9c590117477f8269d46ec13 (patch) | |
tree | 228787643f990ecf10006efe16befacbd23c5db6 /dev-libs/openssl/files | |
parent | Version bumped. (diff) | |
download | gentoo-2-ce221a65261e4386b9c590117477f8269d46ec13.tar.gz gentoo-2-ce221a65261e4386b9c590117477f8269d46ec13.tar.bz2 gentoo-2-ce221a65261e4386b9c590117477f8269d46ec13.zip |
Add fix from upstream for CVE-2007-3108 #188799.
(Portage version: 2.1.3.7)
Diffstat (limited to 'dev-libs/openssl/files')
-rw-r--r-- | dev-libs/openssl/files/digest-openssl-0.9.8e-r2 | 3 | ||||
-rw-r--r-- | dev-libs/openssl/files/openssl-0.9.8e-CVE-2007-3108.patch | 128 |
2 files changed, 131 insertions, 0 deletions
diff --git a/dev-libs/openssl/files/digest-openssl-0.9.8e-r2 b/dev-libs/openssl/files/digest-openssl-0.9.8e-r2 new file mode 100644 index 000000000000..1ecd5456a79a --- /dev/null +++ b/dev-libs/openssl/files/digest-openssl-0.9.8e-r2 @@ -0,0 +1,3 @@ +MD5 3a7ff24f6ea5cd711984722ad654b927 openssl-0.9.8e.tar.gz 3341665 +RMD160 c1a498606dc0fc7219376b950fab6b53687466db openssl-0.9.8e.tar.gz 3341665 +SHA256 414e8428b95fbc51707965fda31390497d058290356426bfe084b49464a60340 openssl-0.9.8e.tar.gz 3341665 diff --git a/dev-libs/openssl/files/openssl-0.9.8e-CVE-2007-3108.patch b/dev-libs/openssl/files/openssl-0.9.8e-CVE-2007-3108.patch new file mode 100644 index 000000000000..5437c801f4d1 --- /dev/null +++ b/dev-libs/openssl/files/openssl-0.9.8e-CVE-2007-3108.patch @@ -0,0 +1,128 @@ +http://bugs.gentoo.org/188799 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +- --- openssl-0.9.8e/crypto/bn/bn_mont.c 2006-06-16 03:01:14.000000000 +0200 ++++ openssl-0.9.8-cvs/crypto/bn/bn_mont.c 2007-06-29 10:13:25.000000000 +0200 +@@ -176,7 +176,6 @@ + + max=(nl+al+1); /* allow for overflow (no?) XXX */ + if (bn_wexpand(r,max) == NULL) goto err; +- - if (bn_wexpand(ret,max) == NULL) goto err; + + r->neg=a->neg^n->neg; + np=n->d; +@@ -228,19 +227,70 @@ + } + bn_correct_top(r); + +- - /* mont->ri will be a multiple of the word size */ +- -#if 0 +- - BN_rshift(ret,r,mont->ri); +- -#else +- - ret->neg = r->neg; +- - x=ri; ++ /* mont->ri will be a multiple of the word size and below code ++ * is kind of BN_rshift(ret,r,mont->ri) equivalent */ ++ if (r->top <= ri) ++ { ++ ret->top=0; ++ retn=1; ++ goto err; ++ } ++ al=r->top-ri; ++ ++# define BRANCH_FREE 1 ++# if BRANCH_FREE ++ if (bn_wexpand(ret,ri) == NULL) goto err; ++ x=0-(((al-ri)>>(sizeof(al)*8-1))&1); ++ ret->top=x=(ri&~x)|(al&x); /* min(ri,al) */ ++ ret->neg=r->neg; ++ + rp=ret->d; +- - ap= &(r->d[x]); +- - if (r->top < x) +- - al=0; +- - else +- - al=r->top-x; ++ ap=&(r->d[ri]); ++ ++ { ++ size_t m1,m2; ++ ++ v=bn_sub_words(rp,ap,np,ri); ++ /* this ----------------^^ works even in al<ri case ++ * thanks to zealous zeroing of top of the vector in the ++ * beginning. */ ++ ++ /* if (al==ri && !v) || al>ri) nrp=rp; else nrp=ap; */ ++ /* in other words if subtraction result is real, then ++ * trick unconditional memcpy below to perform in-place ++ * "refresh" instead of actual copy. */ ++ m1=0-(size_t)(((al-ri)>>(sizeof(al)*8-1))&1); /* al<ri */ ++ m2=0-(size_t)(((ri-al)>>(sizeof(al)*8-1))&1); /* al>ri */ ++ m1|=m2; /* (al!=ri) */ ++ m1|=(0-(size_t)v); /* (al!=ri || v) */ ++ m1&=~m2; /* (al!=ri || v) && !al>ri */ ++ nrp=(BN_ULONG *)(((size_t)rp&~m1)|((size_t)ap&m1)); ++ } ++ ++ /* 'i<ri' is chosen to eliminate dependency on input data, even ++ * though it results in redundant copy in al<ri case. */ ++ for (i=0,ri-=4; i<ri; i+=4) ++ { ++ BN_ULONG t1,t2,t3,t4; ++ ++ t1=nrp[i+0]; ++ t2=nrp[i+1]; ++ t3=nrp[i+2]; ap[i+0]=0; ++ t4=nrp[i+3]; ap[i+1]=0; ++ rp[i+0]=t1; ap[i+2]=0; ++ rp[i+1]=t2; ap[i+3]=0; ++ rp[i+2]=t3; ++ rp[i+3]=t4; ++ } ++ for (ri+=4; i<ri; i++) ++ rp[i]=nrp[i], ap[i]=0; ++# else ++ if (bn_wexpand(ret,al) == NULL) goto err; + ret->top=al; ++ ret->neg=r->neg; ++ ++ rp=ret->d; ++ ap=&(r->d[ri]); + al-=4; + for (i=0; i<al; i+=4) + { +@@ -258,7 +308,7 @@ + al+=4; + for (; i<al; i++) + rp[i]=ap[i]; +- -#endif ++# endif + #else /* !MONT_WORD */ + BIGNUM *t1,*t2; + +@@ -278,10 +328,12 @@ + if (!BN_rshift(ret,t2,mont->ri)) goto err; + #endif /* MONT_WORD */ + ++#if !defined(BRANCH_FREE) || BRANCH_FREE==0 + if (BN_ucmp(ret, &(mont->N)) >= 0) + { + if (!BN_usub(ret,ret,&(mont->N))) goto err; + } ++#endif + retn=1; + bn_check_top(ret); + err: +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.5 (GNU/Linux) + +iQCVAwUBRrGk++6tTP1JpWPZAQJbjwP/W/6mROtxOVU1gvvq/uFHCytNWHVaJfKA +7zh+v4OPQEIYekIBkEpNFgTJbHcyIZoyDNnwOetkRXvI4LDqvV1V5/pA5bzrKqDj +zv7Hj8R7DGqG8ad0Esf3l7SqqirI3curkIzm5/cALJBJxz/Pp7qyXNzzQgp55UPz +iBDdynBpa+s= +=aquq +-----END PGP SIGNATURE----- |