chacha/asm/chacha*: ensure that zero length is handled (without crash).
RT#4305 Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
@@ -200,6 +200,12 @@ ChaCha20_ctr32:
|
||||
#else
|
||||
adr r14,.LChaCha20_ctr32
|
||||
#endif
|
||||
cmp r2,#0 @ len==0?
|
||||
#ifdef __thumb2__
|
||||
itt eq
|
||||
#endif
|
||||
addeq sp,sp,#4*3
|
||||
beq .Lno_data
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
cmp r2,#192 @ test len
|
||||
bls .Lshort
|
||||
@@ -605,6 +611,7 @@ $code.=<<___;
|
||||
|
||||
.Ldone:
|
||||
add sp,sp,#4*(32+3)
|
||||
.Lno_data:
|
||||
ldmia sp!,{r4-r11,pc}
|
||||
.size ChaCha20_ctr32,.-ChaCha20_ctr32
|
||||
___
|
||||
|
||||
@@ -140,6 +140,7 @@ $code.=<<___;
|
||||
.type ChaCha20_ctr32,\@function
|
||||
.align 32
|
||||
ChaCha20_ctr32:
|
||||
cl${g}ije $len,0,.Lno_data # $len==0?
|
||||
a${g}hi $len,-64
|
||||
l${g}hi %r1,-$frame
|
||||
stm${g} %r6,%r15,`6*$SIZE_T`($sp)
|
||||
@@ -271,6 +272,7 @@ $code.=<<___;
|
||||
stmg %r0,%r3,$stdframe+4*12($sp)
|
||||
|
||||
lm${g} %r6,%r15,`$frame+6*$SIZE_T`($sp)
|
||||
.Lno_data:
|
||||
br %r14
|
||||
|
||||
.align 16
|
||||
|
||||
@@ -123,6 +123,9 @@ my ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-1)&3),($ai,$bi,$ci,$di)); # previous
|
||||
&static_label("pic_point");
|
||||
|
||||
&function_begin("ChaCha20_ctr32");
|
||||
&xor ("eax","eax");
|
||||
&cmp ("eax",&wparam(2)); # len==0?
|
||||
&je (&label("no_data"));
|
||||
if ($xmm) {
|
||||
&call (&label("pic_point"));
|
||||
&set_label("pic_point");
|
||||
@@ -356,6 +359,7 @@ if ($xmm) {
|
||||
|
||||
&set_label("done");
|
||||
&stack_pop(33);
|
||||
&set_label("no_data");
|
||||
&function_end("ChaCha20_ctr32");
|
||||
|
||||
if ($xmm) {
|
||||
|
||||
@@ -219,6 +219,8 @@ $code.=<<___;
|
||||
.type ChaCha20_ctr32,\@function,5
|
||||
.align 64
|
||||
ChaCha20_ctr32:
|
||||
cmp \$0,$len
|
||||
je .Lno_data
|
||||
mov OPENSSL_ia32cap_P+4(%rip),%r10
|
||||
test \$`1<<(41-32)`,%r10d
|
||||
jnz .LChaCha20_ssse3
|
||||
@@ -375,6 +377,7 @@ $code.=<<___;
|
||||
pop %r12
|
||||
pop %rbp
|
||||
pop %rbx
|
||||
.Lno_data:
|
||||
ret
|
||||
.size ChaCha20_ctr32,.-ChaCha20_ctr32
|
||||
___
|
||||
|
||||
Reference in New Issue
Block a user