diff mbox series

crypto: Reduce the size of sha512_compress() stack frame

Message ID 1534956548-8088-7-git-send-email-andrei.otcheretianski@intel.com
State Accepted
Headers show
Series crypto: Reduce the size of sha512_compress() stack frame | expand

Commit Message

Andrei Otcheretianski Aug. 22, 2018, 4:49 p.m. UTC
From: Ilan Peer <ilan.peer@intel.com>

The function sha512_compress() has a local variable that
consumes 640 bytes. This is very heavy for embedded devices
that have limited stack resources.

Handle this by replacing the static allocation with a
dynamic one.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
---
 src/crypto/sha512-internal.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Comments

Jouni Malinen Jan. 2, 2019, 3:19 p.m. UTC | #1
On Wed, Aug 22, 2018 at 07:49:08PM +0300, Andrei Otcheretianski wrote:
> The function sha512_compress() has a local variable that
> consumes 640 bytes. This is very heavy for embedded devices
> that have limited stack resources.
> 
> Handle this by replacing the static allocation with a
> dynamic one.

Thanks, applied.
diff mbox series

Patch

diff --git a/src/crypto/sha512-internal.c b/src/crypto/sha512-internal.c
index 76c4fe7..c026394 100644
--- a/src/crypto/sha512-internal.c
+++ b/src/crypto/sha512-internal.c
@@ -109,9 +109,14 @@  static const u64 K[80] = {
 /* compress 1024-bits */
 static int sha512_compress(struct sha512_state *md, unsigned char *buf)
 {
-	u64 S[8], W[80], t0, t1;
+	u64 S[8], t0, t1;
+	u64 *W;
 	int i;
 
+	W = os_malloc(80 * sizeof(u64));
+	if (!W)
+		return -1;
+
 	/* copy state into S */
 	for (i = 0; i < 8; i++) {
 		S[i] = md->state[i];
@@ -146,6 +151,7 @@  static int sha512_compress(struct sha512_state *md, unsigned char *buf)
 		md->state[i] = md->state[i] + S[i];
 	}
 
+	os_free(W);
 	return 0;
 }