Commit 622a531c authored by Andy Polyakov's avatar Andy Polyakov
Browse files

chacha/asm/chacha*: ensure that zero length is handled (without crash).



RT#4305

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 29880e97
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
___
+2 −0
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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) {
+3 −0
Original line number Diff line number Diff line
@@ -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
___