diff options
Diffstat (limited to 'crypto/dh_helper.c')
-rw-r--r-- | crypto/dh_helper.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/crypto/dh_helper.c b/crypto/dh_helper.c index a413b311e568..788a9e572918 100644 --- a/crypto/dh_helper.c +++ b/crypto/dh_helper.c @@ -90,6 +90,14 @@ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params) params->p = (void *)(ptr + params->key_size); params->g = (void *)(ptr + params->key_size + params->p_size); + /* + * Don't permit 'p' to be 0. It's not a prime number, and it's subject + * to corner cases such as 'mod 0' being undefined or + * crypto_kpp_maxsize() returning 0. + */ + if (memchr_inv(params->p, 0, params->p_size) == NULL) + return -EINVAL; + return 0; } EXPORT_SYMBOL_GPL(crypto_dh_decode_key); |