crypto: ecdh - avoid buffer overflow in ecdh_set_secret()
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.
--- crypto/ecdh.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
crypto/ecdh.c +2 -1
@@ -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, ¶ms) <0 ) +if (crypto_ecdh_decode_key (buf, len, ¶ms) <0 || + params.key_size >sizeof (ctx->private_key))return -EINVAL ; ndigits =ecdh_supported_curve (params.curve_id);
Signature · 1 line
2.17.1
Herbert Xu
maintainerQuoted 9 lines · Ard Biesheuvel
Pavel reports that commit
17858b140bf4("crypto: ecdh - avoid unaligned accesses inecdh_set_secret()") fixes one problem but introduces another:
the unconditionalmemcpy()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()")Reported-by Pavel Machek <[email protected]>Cc <[email protected]>Signed-off-by Ard Biesheuvel <[email protected]>--- 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