bn/asm/x86_64-mont5.pl: fix valgrind error.
authorAndy Polyakov <appro@openssl.org>
Wed, 20 May 2015 07:36:48 +0000 (09:36 +0200)
committerAndy Polyakov <appro@openssl.org>
Sun, 24 May 2015 19:31:49 +0000 (21:31 +0200)
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 <levitte@openssl.org>
(cherry picked from commit 69567687b0b7ed67831c17a010f4d46dfd059aef)

crypto/bn/asm/x86_64-mont5.pl

index fa22c30b1fdd60c75926b61decf87a72cc6edcb6..820de3d6f6270b0ca2e47b965ba1775699281848 100755 (executable)
@@ -3226,11 +3226,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