From: Andy Polyakov Date: Wed, 20 May 2015 07:36:48 +0000 (+0200) Subject: bn/asm/x86_64-mont5.pl: fix valgrind error. X-Git-Tag: OpenSSL_1_1_0-pre1~1088 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=69567687b0b7ed67831c17a010f4d46dfd059aef;p=openssl bn/asm/x86_64-mont5.pl: fix valgrind error. bn_get_bits5 was overstepping array boundary by 1 byte. It was exclusively read overstep and data could not have been used. The only potential problem would be if array happens to end on the very edge of last accesible page. Reviewed-by: Richard Levitte --- diff --git a/crypto/bn/asm/x86_64-mont5.pl b/crypto/bn/asm/x86_64-mont5.pl index 69e81bf4dd..aa96d43e89 100755 --- a/crypto/bn/asm/x86_64-mont5.pl +++ b/crypto/bn/asm/x86_64-mont5.pl @@ -3231,11 +3231,16 @@ $code.=<<___; .type bn_get_bits5,\@abi-omnipotent .align 16 bn_get_bits5: - mov $inp,%r10 + lea 0($inp),%r10 + lea 1($inp),%r11 mov $num,%ecx - shr \$3,$num - movzw (%r10,$num),%eax - and \$7,%ecx + shr \$4,$num + and \$15,%ecx + lea -8(%ecx),%eax + cmp \$11,%ecx + cmova %r11,%r10 + cmova %eax,%ecx + movzw (%r10,$num,2),%eax shrl %cl,%eax and \$31,%eax ret