Browse Source

OPENSSL_cleanse to accept zero length parameter [matching C implementation].

master
Andy Polyakov 13 years ago
parent
commit
7676eebf42
7 changed files with 22 additions and 1 deletions
  1. +1
    -0
      crypto/alphacpuid.s
  2. +7
    -0
      crypto/perlasm/ppc-xlate.pl
  3. +2
    -0
      crypto/ppccpuid.pl
  4. +2
    -0
      crypto/s390xcpuid.S
  5. +4
    -0
      crypto/sparccpuid.S
  6. +3
    -1
      crypto/x86_64cpuid.pl
  7. +3
    -0
      crypto/x86cpuid.pl

+ 1
- 0
crypto/alphacpuid.s View File

@ -90,6 +90,7 @@ OPENSSL_rdtsc:
OPENSSL_cleanse:
.frame $30,0,$26
.prologue 0
beq $17,.Ldone
and $16,7,$0
bic $17,7,$at
beq $at,.Little


+ 7
- 0
crypto/perlasm/ppc-xlate.pl View File

@ -101,6 +101,13 @@ my $bnelr = sub {
" .long ".sprintf "0x%x",19<<26|$bo<<21|2<<16|16<<1 :
" bclr $bo,2";
};
my $beqlr = sub {
my $f = shift;
my $bo = $f=~/-/ ? 12+2 : 12; # optional "not to be taken" hint
($flavour =~ /linux/) ? # GNU as doesn't allow most recent hints
" .long ".sprintf "0x%X",19<<26|$bo<<21|2<<16|16<<1 :
" bclr $bo,2";
};
# GNU assembler can't handle extrdi rA,rS,16,48, or when sum of last two
# arguments is 64, with "operand out of range" error.
my $extrdi = sub {


+ 2
- 0
crypto/ppccpuid.pl View File

@ -83,6 +83,8 @@ Loop: lwarx r5,0,r3
$CMPLI r4,7
li r0,0
bge Lot
$CMPLI r4,0
beqlr-
Little: mtctr r4
stb r0,0(r3)
addi r3,r3,1


+ 2
- 0
crypto/s390xcpuid.S View File

@ -62,6 +62,8 @@ OPENSSL_cleanse:
lghi %r0,0
clgr %r3,%r4
jh .Lot
clgr %r3,%r0
bcr 8,%r14
.Little:
stc %r0,0(%r2)
la %r2,1(%r2)


+ 4
- 0
crypto/sparccpuid.S View File

@ -242,6 +242,10 @@ OPENSSL_cleanse:
#else
bgu .Lot
#endif
cmp %o1,0
bne .Little
nop
retl
nop
.Little:


+ 3
- 1
crypto/x86_64cpuid.pl View File

@ -145,12 +145,14 @@ OPENSSL_cleanse:
xor %rax,%rax
cmp \$15,$arg2
jae .Lot
cmp \$0,$arg2
je .Lret
.Little:
mov %al,($arg1)
sub \$1,$arg2
lea 1($arg1),$arg1
jnz .Little
ret
.Lret: ret
.align 16
.Lot:
test \$7,$arg1


+ 3
- 0
crypto/x86cpuid.pl View File

@ -279,11 +279,14 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&xor ("eax","eax");
&cmp ("ecx",7);
&jae (&label("lot"));
&cmp ("ecx",0);
&je (&label("ret"));
&set_label("little");
&mov (&BP(0,"edx"),"al");
&sub ("ecx",1);
&lea ("edx",&DWP(1,"edx"));
&jnz (&label("little"));
&set_label("ret");
&ret ();
&set_label("lot",16);


Loading…
Cancel
Save