Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccd9888f authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu
Browse files

crypto: dh - Don't permit 'key' or 'g' size longer than 'p'



The "qat-dh" DH implementation assumes that 'key' and 'g' can be copied
into a buffer with size 'p_size'.  However it was never checked that
that was actually the case, which most likely allowed users to cause a
buffer underflow via KEYCTL_DH_COMPUTE.

Fix this by updating crypto_dh_decode_key() to verify this precondition
for all DH implementations.

Fixes: c9839143 ("crypto: qat - Add DH support")
Cc: <stable@vger.kernel.org> # v4.8+
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Reviewed-by: default avatarTudor Ambarus <tudor.ambarus@microchip.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 199512b1
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -83,6 +83,14 @@ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params)
	if (secret.len != crypto_dh_key_len(params))
		return -EINVAL;

	/*
	 * Don't permit the buffer for 'key' or 'g' to be larger than 'p', since
	 * some drivers assume otherwise.
	 */
	if (params->key_size > params->p_size ||
	    params->g_size > params->p_size)
		return -EINVAL;

	/* Don't allocate memory. Set pointers to data within
	 * the given buffer
	 */