Adjust SP before content is written below it.

From Valgrind:
I/valgrind( 1837): ==1838== Invalid write of size 4
I/valgrind( 1837): ==1838==    at 0x4E312A4: sha1_block_data_order
(sha1-armv4-large.s:109)
I/valgrind( 1837): ==1838==  Address 0xbdd6abb8 is just below the stack
ptr.  To suppress, use: --workaround-gcc296-bugs=yes

This is probably just a cosmetic fix to make Valgrind happy.

BUG: 5505776
Change-Id: Ice2fa65ab753a7c4cb92f531179db8b200f8b2c5
diff --git a/crypto/sha/asm/sha1-armv4-large.pl b/crypto/sha/asm/sha1-armv4-large.pl
index 6e65fe3..79e3f61 100644
--- a/crypto/sha/asm/sha1-armv4-large.pl
+++ b/crypto/sha/asm/sha1-armv4-large.pl
@@ -161,6 +161,7 @@
 $code.=<<___;
 	teq	$Xi,sp
 	bne	.L_00_15		@ [((11+4)*5+2)*3]
+	sub	sp,sp,#5*4
 ___
 	&BODY_00_15(@V);	unshift(@V,pop(@V));
 	&BODY_16_19(@V);	unshift(@V,pop(@V));
@@ -170,7 +171,7 @@
 $code.=<<___;
 
 	ldr	$K,.LK_20_39		@ [+15+16*4]
-	sub	sp,sp,#25*4
+	sub	sp,sp,#20*4
 	cmn	sp,#0			@ [+3], clear carry to denote 20_39
 .L_20_39_or_60_79:
 ___
diff --git a/crypto/sha/asm/sha1-armv4-large.s b/crypto/sha/asm/sha1-armv4-large.s
index 8833c1e..7f687d9 100644
--- a/crypto/sha/asm/sha1-armv4-large.s
+++ b/crypto/sha/asm/sha1-armv4-large.s
@@ -93,6 +93,7 @@
 	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
 	teq	r14,sp
 	bne	.L_00_15		@ [((11+4)*5+2)*3]
+	sub	sp,sp,#5*4
 	ldrb	r9,[r1],#4
 	ldrb	r10,[r1,#-1]
 	ldrb	r11,[r1,#-2]
@@ -178,7 +179,7 @@
 	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
 
 	ldr	r8,.LK_20_39		@ [+15+16*4]
-	sub	sp,sp,#25*4
+	sub	sp,sp,#20*4
 	cmn	sp,#0			@ [+3], clear carry to denote 20_39
 .L_20_39_or_60_79:
 	ldr	r9,[r14,#15*4]
diff --git a/openssl.config b/openssl.config
index 27078ea..293c744 100644
--- a/openssl.config
+++ b/openssl.config
@@ -189,6 +189,7 @@
 jsse.patch \
 npn.patch \
 sslv3_uninit_padding.patch \
+sha1_armv4_large.patch \
 "
 
 OPENSSL_PATCHES_progs_SOURCES="\
diff --git a/patches/README b/patches/README
index 0634d54..54b6e06 100644
--- a/patches/README
+++ b/patches/README
@@ -33,3 +33,7 @@
 sslv3_uninit_padding.patch
 
 This patch sets the padding for SSLv3 block ciphers to zero.
+
+sha1_armv4_large.patch
+
+This patch eliminates memory stores to addresses below SP.
diff --git a/patches/sha1_armv4_large.patch b/patches/sha1_armv4_large.patch
new file mode 100644
index 0000000..359ff94
--- /dev/null
+++ b/patches/sha1_armv4_large.patch
@@ -0,0 +1,21 @@
+diff --git a/crypto/sha/asm/sha1-armv4-large.pl b/crypto/sha/asm/sha1-armv4-large.pl
+index 6e65fe3..79e3f61 100644
+--- a/crypto/sha/asm/sha1-armv4-large.pl
++++ b/crypto/sha/asm/sha1-armv4-large.pl
+@@ -161,6 +161,7 @@ for($i=0;$i<5;$i++) {
+ $code.=<<___;
+ 	teq	$Xi,sp
+ 	bne	.L_00_15		@ [((11+4)*5+2)*3]
++	sub	sp,sp,#5*4
+ ___
+ 	&BODY_00_15(@V);	unshift(@V,pop(@V));
+ 	&BODY_16_19(@V);	unshift(@V,pop(@V));
+@@ -170,7 +171,7 @@ ___
+ $code.=<<___;
+ 
+ 	ldr	$K,.LK_20_39		@ [+15+16*4]
+-	sub	sp,sp,#25*4
++	sub	sp,sp,#20*4
+ 	cmn	sp,#0			@ [+3], clear carry to denote 20_39
+ .L_20_39_or_60_79:
+ ___