Skip to contentSkip to conversation

crypto: ecdh - avoid buffer overflow in ecdh_set_secret()

PATCH In review Ard Biesheuvel 2 participants 2 messages Jan 2, 2021 Crypto API

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 crypto: ecdh - avoid buffer overflow in ecdh_set_secret()

Pavel reports that commit 17858b140bf4 ("crypto: ecdh - avoid unaligned accesses in ecdh_set_secret()") fixes one problem but introduces another:
the unconditional memcpy() introduced by that commit may overflow the target buffer if the source data is invalid, which could be the result of intentional tampering.

So check params.key_size explicitly against the size of the target buffer before validating the key further.

Fixes 17858b140bf4 ("crypto: ecdh - avoid unaligned accesses in ecdh_set_secret()")
---
 crypto/ecdh.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
crypto/ecdh.c +2 -1
index d56b8603dec9..96f80c8f8e30 100644
@@ -39,7 +39,8 @@ static int ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
 	struct ecdh params;
 	unsigned int ndigits;
 
-	if (crypto_ecdh_decode_key(buf, len, &params) < 0)
+	if (crypto_ecdh_decode_key(buf, len, &params) < 0 ||
+	    params.key_size > sizeof(ctx->private_key))
 		return -EINVAL;
 
 	ndigits = ecdh_supported_curve(params.curve_id);
Signature · 1 line
2.17.1
maintainer
#1 lore raw
Quoted 9 lines · Ard Biesheuvel

Pavel reports that commit 17858b140bf4 ("crypto: ecdh - avoid unaligned accesses in ecdh_set_secret()") fixes one problem but introduces another:
the unconditional memcpy() introduced by that commit may overflow the target buffer if the source data is invalid, which could be the result of intentional tampering.

So check params.key_size explicitly against the size of the target buffer before validating the key further.

Quoted 7 lines
Fixes 17858b140bf4 ("crypto: ecdh - avoid unaligned accesses in ecdh_set_secret()")
---
 crypto/ecdh.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Patch applied. Thanks.

Signature · 3 lines
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt